Table ATH and DayQuotes in the middle of a chartJust important things at a glance ..
AlltimeHigh and Daily High/Low
Cari dalam skrip untuk " TABLE "
Universal Ratio Trend Matrix [InvestorUnknown]The Universal Ratio Trend Matrix is designed for trend analysis on asset/asset ratios, supporting up to 40 different assets. Its primary purpose is to help identify which assets are outperforming others within a selection, providing a broad overview of market trends through a matrix of ratios. The indicator automatically expands the matrix based on the number of assets chosen, simplifying the process of comparing multiple assets in terms of performance.
Key features include the ability to choose from a narrow selection of indicators to perform the ratio trend analysis, allowing users to apply well-defined metrics to their comparison.
Drawback: Due to the computational intensity involved in calculating ratios across many assets, the indicator has a limitation related to loading speed. TradingView has time limits for calculations, and for users on the basic (free) plan, this could result in frequent errors due to exceeded time limits. To use the indicator effectively, users with any paid plans should run it on timeframes higher than 8h (the lowest timeframe on which it managed to load with 40 assets), as lower timeframes may not reliably load.
Indicators:
RSI_raw: Simple function to calculate the Relative Strength Index (RSI) of a source (asset price).
RSI_sma: Calculates RSI followed by a Simple Moving Average (SMA).
RSI_ema: Calculates RSI followed by an Exponential Moving Average (EMA).
CCI: Calculates the Commodity Channel Index (CCI).
Fisher: Implements the Fisher Transform to normalize prices.
Utility Functions:
f_remove_exchange_name: Strips the exchange name from asset tickers (e.g., "INDEX:BTCUSD" to "BTCUSD").
f_remove_exchange_name(simple string name) =>
string parts = str.split(name, ":")
string result = array.size(parts) > 1 ? array.get(parts, 1) : name
result
f_get_price: Retrieves the closing price of a given asset ticker using request.security().
f_constant_src: Checks if the source data is constant by comparing multiple consecutive values.
Inputs:
General settings allow users to select the number of tickers for analysis (used_assets) and choose the trend indicator (RSI, CCI, Fisher, etc.).
Table settings customize how trend scores are displayed in terms of text size, header visibility, highlighting options, and top-performing asset identification.
The script includes inputs for up to 40 assets, allowing the user to select various cryptocurrencies (e.g., BTCUSD, ETHUSD, SOLUSD) or other assets for trend analysis.
Price Arrays:
Price values for each asset are stored in variables (price_a1 to price_a40) initialized as na. These prices are updated only for the number of assets specified by the user (used_assets).
Trend scores for each asset are stored in separate arrays
// declare price variables as "na"
var float price_a1 = na, var float price_a2 = na, var float price_a3 = na, var float price_a4 = na, var float price_a5 = na
var float price_a6 = na, var float price_a7 = na, var float price_a8 = na, var float price_a9 = na, var float price_a10 = na
var float price_a11 = na, var float price_a12 = na, var float price_a13 = na, var float price_a14 = na, var float price_a15 = na
var float price_a16 = na, var float price_a17 = na, var float price_a18 = na, var float price_a19 = na, var float price_a20 = na
var float price_a21 = na, var float price_a22 = na, var float price_a23 = na, var float price_a24 = na, var float price_a25 = na
var float price_a26 = na, var float price_a27 = na, var float price_a28 = na, var float price_a29 = na, var float price_a30 = na
var float price_a31 = na, var float price_a32 = na, var float price_a33 = na, var float price_a34 = na, var float price_a35 = na
var float price_a36 = na, var float price_a37 = na, var float price_a38 = na, var float price_a39 = na, var float price_a40 = na
// create "empty" arrays to store trend scores
var a1_array = array.new_int(40, 0), var a2_array = array.new_int(40, 0), var a3_array = array.new_int(40, 0), var a4_array = array.new_int(40, 0)
var a5_array = array.new_int(40, 0), var a6_array = array.new_int(40, 0), var a7_array = array.new_int(40, 0), var a8_array = array.new_int(40, 0)
var a9_array = array.new_int(40, 0), var a10_array = array.new_int(40, 0), var a11_array = array.new_int(40, 0), var a12_array = array.new_int(40, 0)
var a13_array = array.new_int(40, 0), var a14_array = array.new_int(40, 0), var a15_array = array.new_int(40, 0), var a16_array = array.new_int(40, 0)
var a17_array = array.new_int(40, 0), var a18_array = array.new_int(40, 0), var a19_array = array.new_int(40, 0), var a20_array = array.new_int(40, 0)
var a21_array = array.new_int(40, 0), var a22_array = array.new_int(40, 0), var a23_array = array.new_int(40, 0), var a24_array = array.new_int(40, 0)
var a25_array = array.new_int(40, 0), var a26_array = array.new_int(40, 0), var a27_array = array.new_int(40, 0), var a28_array = array.new_int(40, 0)
var a29_array = array.new_int(40, 0), var a30_array = array.new_int(40, 0), var a31_array = array.new_int(40, 0), var a32_array = array.new_int(40, 0)
var a33_array = array.new_int(40, 0), var a34_array = array.new_int(40, 0), var a35_array = array.new_int(40, 0), var a36_array = array.new_int(40, 0)
var a37_array = array.new_int(40, 0), var a38_array = array.new_int(40, 0), var a39_array = array.new_int(40, 0), var a40_array = array.new_int(40, 0)
f_get_price(simple string ticker) =>
request.security(ticker, "", close)
// Prices for each USED asset
f_get_asset_price(asset_number, ticker) =>
if (used_assets >= asset_number)
f_get_price(ticker)
else
na
// overwrite empty variables with the prices if "used_assets" is greater or equal to the asset number
if barstate.isconfirmed // use barstate.isconfirmed to avoid "na prices" and calculation errors that result in empty cells in the table
price_a1 := f_get_asset_price(1, asset1), price_a2 := f_get_asset_price(2, asset2), price_a3 := f_get_asset_price(3, asset3), price_a4 := f_get_asset_price(4, asset4)
price_a5 := f_get_asset_price(5, asset5), price_a6 := f_get_asset_price(6, asset6), price_a7 := f_get_asset_price(7, asset7), price_a8 := f_get_asset_price(8, asset8)
price_a9 := f_get_asset_price(9, asset9), price_a10 := f_get_asset_price(10, asset10), price_a11 := f_get_asset_price(11, asset11), price_a12 := f_get_asset_price(12, asset12)
price_a13 := f_get_asset_price(13, asset13), price_a14 := f_get_asset_price(14, asset14), price_a15 := f_get_asset_price(15, asset15), price_a16 := f_get_asset_price(16, asset16)
price_a17 := f_get_asset_price(17, asset17), price_a18 := f_get_asset_price(18, asset18), price_a19 := f_get_asset_price(19, asset19), price_a20 := f_get_asset_price(20, asset20)
price_a21 := f_get_asset_price(21, asset21), price_a22 := f_get_asset_price(22, asset22), price_a23 := f_get_asset_price(23, asset23), price_a24 := f_get_asset_price(24, asset24)
price_a25 := f_get_asset_price(25, asset25), price_a26 := f_get_asset_price(26, asset26), price_a27 := f_get_asset_price(27, asset27), price_a28 := f_get_asset_price(28, asset28)
price_a29 := f_get_asset_price(29, asset29), price_a30 := f_get_asset_price(30, asset30), price_a31 := f_get_asset_price(31, asset31), price_a32 := f_get_asset_price(32, asset32)
price_a33 := f_get_asset_price(33, asset33), price_a34 := f_get_asset_price(34, asset34), price_a35 := f_get_asset_price(35, asset35), price_a36 := f_get_asset_price(36, asset36)
price_a37 := f_get_asset_price(37, asset37), price_a38 := f_get_asset_price(38, asset38), price_a39 := f_get_asset_price(39, asset39), price_a40 := f_get_asset_price(40, asset40)
Universal Indicator Calculation (f_calc_score):
This function allows switching between different trend indicators (RSI, CCI, Fisher) for flexibility.
It uses a switch-case structure to calculate the indicator score, where a positive trend is denoted by 1 and a negative trend by 0. Each indicator has its own logic to determine whether the asset is trending up or down.
// use switch to allow "universality" in indicator selection
f_calc_score(source, trend_indicator, int_1, int_2) =>
int score = na
if (not f_constant_src(source)) and source > 0.0 // Skip if you are using the same assets for ratio (for example BTC/BTC)
x = switch trend_indicator
"RSI (Raw)" => RSI_raw(source, int_1)
"RSI (SMA)" => RSI_sma(source, int_1, int_2)
"RSI (EMA)" => RSI_ema(source, int_1, int_2)
"CCI" => CCI(source, int_1)
"Fisher" => Fisher(source, int_1)
y = switch trend_indicator
"RSI (Raw)" => x > 50 ? 1 : 0
"RSI (SMA)" => x > 50 ? 1 : 0
"RSI (EMA)" => x > 50 ? 1 : 0
"CCI" => x > 0 ? 1 : 0
"Fisher" => x > x ? 1 : 0
score := y
else
score := 0
score
Array Setting Function (f_array_set):
This function populates an array with scores calculated for each asset based on a base price (p_base) divided by the prices of the individual assets.
It processes multiple assets (up to 40), calling the f_calc_score function for each.
// function to set values into the arrays
f_array_set(a_array, p_base) =>
array.set(a_array, 0, f_calc_score(p_base / price_a1, trend_indicator, int_1, int_2))
array.set(a_array, 1, f_calc_score(p_base / price_a2, trend_indicator, int_1, int_2))
array.set(a_array, 2, f_calc_score(p_base / price_a3, trend_indicator, int_1, int_2))
array.set(a_array, 3, f_calc_score(p_base / price_a4, trend_indicator, int_1, int_2))
array.set(a_array, 4, f_calc_score(p_base / price_a5, trend_indicator, int_1, int_2))
array.set(a_array, 5, f_calc_score(p_base / price_a6, trend_indicator, int_1, int_2))
array.set(a_array, 6, f_calc_score(p_base / price_a7, trend_indicator, int_1, int_2))
array.set(a_array, 7, f_calc_score(p_base / price_a8, trend_indicator, int_1, int_2))
array.set(a_array, 8, f_calc_score(p_base / price_a9, trend_indicator, int_1, int_2))
array.set(a_array, 9, f_calc_score(p_base / price_a10, trend_indicator, int_1, int_2))
array.set(a_array, 10, f_calc_score(p_base / price_a11, trend_indicator, int_1, int_2))
array.set(a_array, 11, f_calc_score(p_base / price_a12, trend_indicator, int_1, int_2))
array.set(a_array, 12, f_calc_score(p_base / price_a13, trend_indicator, int_1, int_2))
array.set(a_array, 13, f_calc_score(p_base / price_a14, trend_indicator, int_1, int_2))
array.set(a_array, 14, f_calc_score(p_base / price_a15, trend_indicator, int_1, int_2))
array.set(a_array, 15, f_calc_score(p_base / price_a16, trend_indicator, int_1, int_2))
array.set(a_array, 16, f_calc_score(p_base / price_a17, trend_indicator, int_1, int_2))
array.set(a_array, 17, f_calc_score(p_base / price_a18, trend_indicator, int_1, int_2))
array.set(a_array, 18, f_calc_score(p_base / price_a19, trend_indicator, int_1, int_2))
array.set(a_array, 19, f_calc_score(p_base / price_a20, trend_indicator, int_1, int_2))
array.set(a_array, 20, f_calc_score(p_base / price_a21, trend_indicator, int_1, int_2))
array.set(a_array, 21, f_calc_score(p_base / price_a22, trend_indicator, int_1, int_2))
array.set(a_array, 22, f_calc_score(p_base / price_a23, trend_indicator, int_1, int_2))
array.set(a_array, 23, f_calc_score(p_base / price_a24, trend_indicator, int_1, int_2))
array.set(a_array, 24, f_calc_score(p_base / price_a25, trend_indicator, int_1, int_2))
array.set(a_array, 25, f_calc_score(p_base / price_a26, trend_indicator, int_1, int_2))
array.set(a_array, 26, f_calc_score(p_base / price_a27, trend_indicator, int_1, int_2))
array.set(a_array, 27, f_calc_score(p_base / price_a28, trend_indicator, int_1, int_2))
array.set(a_array, 28, f_calc_score(p_base / price_a29, trend_indicator, int_1, int_2))
array.set(a_array, 29, f_calc_score(p_base / price_a30, trend_indicator, int_1, int_2))
array.set(a_array, 30, f_calc_score(p_base / price_a31, trend_indicator, int_1, int_2))
array.set(a_array, 31, f_calc_score(p_base / price_a32, trend_indicator, int_1, int_2))
array.set(a_array, 32, f_calc_score(p_base / price_a33, trend_indicator, int_1, int_2))
array.set(a_array, 33, f_calc_score(p_base / price_a34, trend_indicator, int_1, int_2))
array.set(a_array, 34, f_calc_score(p_base / price_a35, trend_indicator, int_1, int_2))
array.set(a_array, 35, f_calc_score(p_base / price_a36, trend_indicator, int_1, int_2))
array.set(a_array, 36, f_calc_score(p_base / price_a37, trend_indicator, int_1, int_2))
array.set(a_array, 37, f_calc_score(p_base / price_a38, trend_indicator, int_1, int_2))
array.set(a_array, 38, f_calc_score(p_base / price_a39, trend_indicator, int_1, int_2))
array.set(a_array, 39, f_calc_score(p_base / price_a40, trend_indicator, int_1, int_2))
a_array
Conditional Array Setting (f_arrayset):
This function checks if the number of used assets is greater than or equal to a specified number before populating the arrays.
// only set values into arrays for USED assets
f_arrayset(asset_number, a_array, p_base) =>
if (used_assets >= asset_number)
f_array_set(a_array, p_base)
else
na
Main Logic
The main logic initializes arrays to store scores for each asset. Each array corresponds to one asset's performance score.
Setting Trend Values: The code calls f_arrayset for each asset, populating the respective arrays with calculated scores based on the asset prices.
Combining Arrays: A combined_array is created to hold all the scores from individual asset arrays. This array facilitates further analysis, allowing for an overview of the performance scores of all assets at once.
// create a combined array (work-around since pinescript doesn't support having array of arrays)
var combined_array = array.new_int(40 * 40, 0)
if barstate.islast
for i = 0 to 39
array.set(combined_array, i, array.get(a1_array, i))
array.set(combined_array, i + (40 * 1), array.get(a2_array, i))
array.set(combined_array, i + (40 * 2), array.get(a3_array, i))
array.set(combined_array, i + (40 * 3), array.get(a4_array, i))
array.set(combined_array, i + (40 * 4), array.get(a5_array, i))
array.set(combined_array, i + (40 * 5), array.get(a6_array, i))
array.set(combined_array, i + (40 * 6), array.get(a7_array, i))
array.set(combined_array, i + (40 * 7), array.get(a8_array, i))
array.set(combined_array, i + (40 * 8), array.get(a9_array, i))
array.set(combined_array, i + (40 * 9), array.get(a10_array, i))
array.set(combined_array, i + (40 * 10), array.get(a11_array, i))
array.set(combined_array, i + (40 * 11), array.get(a12_array, i))
array.set(combined_array, i + (40 * 12), array.get(a13_array, i))
array.set(combined_array, i + (40 * 13), array.get(a14_array, i))
array.set(combined_array, i + (40 * 14), array.get(a15_array, i))
array.set(combined_array, i + (40 * 15), array.get(a16_array, i))
array.set(combined_array, i + (40 * 16), array.get(a17_array, i))
array.set(combined_array, i + (40 * 17), array.get(a18_array, i))
array.set(combined_array, i + (40 * 18), array.get(a19_array, i))
array.set(combined_array, i + (40 * 19), array.get(a20_array, i))
array.set(combined_array, i + (40 * 20), array.get(a21_array, i))
array.set(combined_array, i + (40 * 21), array.get(a22_array, i))
array.set(combined_array, i + (40 * 22), array.get(a23_array, i))
array.set(combined_array, i + (40 * 23), array.get(a24_array, i))
array.set(combined_array, i + (40 * 24), array.get(a25_array, i))
array.set(combined_array, i + (40 * 25), array.get(a26_array, i))
array.set(combined_array, i + (40 * 26), array.get(a27_array, i))
array.set(combined_array, i + (40 * 27), array.get(a28_array, i))
array.set(combined_array, i + (40 * 28), array.get(a29_array, i))
array.set(combined_array, i + (40 * 29), array.get(a30_array, i))
array.set(combined_array, i + (40 * 30), array.get(a31_array, i))
array.set(combined_array, i + (40 * 31), array.get(a32_array, i))
array.set(combined_array, i + (40 * 32), array.get(a33_array, i))
array.set(combined_array, i + (40 * 33), array.get(a34_array, i))
array.set(combined_array, i + (40 * 34), array.get(a35_array, i))
array.set(combined_array, i + (40 * 35), array.get(a36_array, i))
array.set(combined_array, i + (40 * 36), array.get(a37_array, i))
array.set(combined_array, i + (40 * 37), array.get(a38_array, i))
array.set(combined_array, i + (40 * 38), array.get(a39_array, i))
array.set(combined_array, i + (40 * 39), array.get(a40_array, i))
Calculating Sums: A separate array_sums is created to store the total score for each asset by summing the values of their respective score arrays. This allows for easy comparison of overall performance.
Ranking Assets: The final part of the code ranks the assets based on their total scores stored in array_sums. It assigns a rank to each asset, where the asset with the highest score receives the highest rank.
// create array for asset RANK based on array.sum
var ranks = array.new_int(used_assets, 0)
// for loop that calculates the rank of each asset
if barstate.islast
for i = 0 to (used_assets - 1)
int rank = 1
for x = 0 to (used_assets - 1)
if i != x
if array.get(array_sums, i) < array.get(array_sums, x)
rank := rank + 1
array.set(ranks, i, rank)
Dynamic Table Creation
Initialization: The table is initialized with a base structure that includes headers for asset names, scores, and ranks. The headers are set to remain constant, ensuring clarity for users as they interpret the displayed data.
Data Population: As scores are calculated for each asset, the corresponding values are dynamically inserted into the table. This is achieved through a loop that iterates over the scores and ranks stored in the combined_array and array_sums, respectively.
Automatic Extending Mechanism
Variable Asset Count: The code checks the number of assets defined by the user. Instead of hardcoding the number of rows in the table, it uses a variable to determine the extent of the data that needs to be displayed. This allows the table to expand or contract based on the number of assets being analyzed.
Dynamic Row Generation: Within the loop that populates the table, the code appends new rows for each asset based on the current asset count. The structure of each row includes the asset name, its score, and its rank, ensuring that the table remains consistent regardless of how many assets are involved.
// Automatically extending table based on the number of used assets
var table table = table.new(position.bottom_center, 50, 50, color.new(color.black, 100), color.white, 3, color.white, 1)
if barstate.islast
if not hide_head
table.cell(table, 0, 0, "Universal Ratio Trend Matrix", text_color = color.white, bgcolor = #010c3b, text_size = fontSize)
table.merge_cells(table, 0, 0, used_assets + 3, 0)
if not hide_inps
table.cell(table, 0, 1,
text = "Inputs: You are using " + str.tostring(trend_indicator) + ", which takes: " + str.tostring(f_get_input(trend_indicator)),
text_color = color.white, text_size = fontSize), table.merge_cells(table, 0, 1, used_assets + 3, 1)
table.cell(table, 0, 2, "Assets", text_color = color.white, text_size = fontSize, bgcolor = #010c3b)
for x = 0 to (used_assets - 1)
table.cell(table, x + 1, 2, text = str.tostring(array.get(assets, x)), text_color = color.white, bgcolor = #010c3b, text_size = fontSize)
table.cell(table, 0, x + 3, text = str.tostring(array.get(assets, x)), text_color = color.white, bgcolor = f_asset_col(array.get(ranks, x)), text_size = fontSize)
for r = 0 to (used_assets - 1)
for c = 0 to (used_assets - 1)
table.cell(table, c + 1, r + 3, text = str.tostring(array.get(combined_array, c + (r * 40))),
text_color = hl_type == "Text" ? f_get_col(array.get(combined_array, c + (r * 40))) : color.white, text_size = fontSize,
bgcolor = hl_type == "Background" ? f_get_col(array.get(combined_array, c + (r * 40))) : na)
for x = 0 to (used_assets - 1)
table.cell(table, x + 1, x + 3, "", bgcolor = #010c3b)
table.cell(table, used_assets + 1, 2, "", bgcolor = #010c3b)
for x = 0 to (used_assets - 1)
table.cell(table, used_assets + 1, x + 3, "==>", text_color = color.white)
table.cell(table, used_assets + 2, 2, "SUM", text_color = color.white, text_size = fontSize, bgcolor = #010c3b)
table.cell(table, used_assets + 3, 2, "RANK", text_color = color.white, text_size = fontSize, bgcolor = #010c3b)
for x = 0 to (used_assets - 1)
table.cell(table, used_assets + 2, x + 3,
text = str.tostring(array.get(array_sums, x)),
text_color = color.white, text_size = fontSize,
bgcolor = f_highlight_sum(array.get(array_sums, x), array.get(ranks, x)))
table.cell(table, used_assets + 3, x + 3,
text = str.tostring(array.get(ranks, x)),
text_color = color.white, text_size = fontSize,
bgcolor = f_highlight_rank(array.get(ranks, x)))
Markov Chain [3D] | FractalystWhat exactly is a Markov Chain?
This indicator uses a Markov Chain model to analyze, quantify, and visualize the transitions between market regimes (Bull, Bear, Neutral) on your chart. It dynamically detects these regimes in real-time, calculates transition probabilities, and displays them as animated 3D spheres and arrows, giving traders intuitive insight into current and future market conditions.
How does a Markov Chain work, and how should I read this spheres-and-arrows diagram?
Think of three weather modes: Sunny, Rainy, Cloudy.
Each sphere is one mode. The loop on a sphere means “stay the same next step” (e.g., Sunny again tomorrow).
The arrows leaving a sphere show where things usually go next if they change (e.g., Sunny moving to Cloudy).
Some paths matter more than others. A more prominent loop means the current mode tends to persist. A more prominent outgoing arrow means a change to that destination is the usual next step.
Direction isn’t symmetric: moving Sunny→Cloudy can behave differently than Cloudy→Sunny.
Now relabel the spheres to markets: Bull, Bear, Neutral.
Spheres: market regimes (uptrend, downtrend, range).
Self‑loop: tendency for the current regime to continue on the next bar.
Arrows: the most common next regime if a switch happens.
How to read: Start at the sphere that matches current bar state. If the loop stands out, expect continuation. If one outgoing path stands out, that switch is the typical next step. Opposite directions can differ (Bear→Neutral doesn’t have to match Neutral→Bear).
What states and transitions are shown?
The three market states visualized are:
Bullish (Bull): Upward or strong-market regime.
Bearish (Bear): Downward or weak-market regime.
Neutral: Sideways or range-bound regime.
Bidirectional animated arrows and probability labels show how likely the market is to move from one regime to another (e.g., Bull → Bear or Neutral → Bull).
How does the regime detection system work?
You can use either built-in price returns (based on adaptive Z-score normalization) or supply three custom indicators (such as volume, oscillators, etc.).
Values are statistically normalized (Z-scored) over a configurable lookback period.
The normalized outputs are classified into Bull, Bear, or Neutral zones.
If using three indicators, their regime signals are averaged and smoothed for robustness.
How are transition probabilities calculated?
On every confirmed bar, the algorithm tracks the sequence of detected market states, then builds a rolling window of transitions.
The code maintains a transition count matrix for all regime pairs (e.g., Bull → Bear).
Transition probabilities are extracted for each possible state change using Laplace smoothing for numerical stability, and frequently updated in real-time.
What is unique about the visualization?
3D animated spheres represent each regime and change visually when active.
Animated, bidirectional arrows reveal transition probabilities and allow you to see both dominant and less likely regime flows.
Particles (moving dots) animate along the arrows, enhancing the perception of regime flow direction and speed.
All elements dynamically update with each new price bar, providing a live market map in an intuitive, engaging format.
Can I use custom indicators for regime classification?
Yes! Enable the "Custom Indicators" switch and select any three chart series as inputs. These will be normalized and combined (each with equal weight), broadening the regime classification beyond just price-based movement.
What does the “Lookback Period” control?
Lookback Period (default: 100) sets how much historical data builds the probability matrix. Shorter periods adapt faster to regime changes but may be noisier. Longer periods are more stable but slower to adapt.
How is this different from a Hidden Markov Model (HMM)?
It sets the window for both regime detection and probability calculations. Lower values make the system more reactive, but potentially noisier. Higher values smooth estimates and make the system more robust.
How is this Markov Chain different from a Hidden Markov Model (HMM)?
Markov Chain (as here): All market regimes (Bull, Bear, Neutral) are directly observable on the chart. The transition matrix is built from actual detected regimes, keeping the model simple and interpretable.
Hidden Markov Model: The actual regimes are unobservable ("hidden") and must be inferred from market output or indicator "emissions" using statistical learning algorithms. HMMs are more complex, can capture more subtle structure, but are harder to visualize and require additional machine learning steps for training.
A standard Markov Chain models transitions between observable states using a simple transition matrix, while a Hidden Markov Model assumes the true states are hidden (latent) and must be inferred from observable “emissions” like price or volume data. In practical terms, a Markov Chain is transparent and easier to implement and interpret; an HMM is more expressive but requires statistical inference to estimate hidden states from data.
Markov Chain: states are observable; you directly count or estimate transition probabilities between visible states. This makes it simpler, faster, and easier to validate and tune.
HMM: states are hidden; you only observe emissions generated by those latent states. Learning involves machine learning/statistical algorithms (commonly Baum–Welch/EM for training and Viterbi for decoding) to infer both the transition dynamics and the most likely hidden state sequence from data.
How does the indicator avoid “repainting” or look-ahead bias?
All regime changes and matrix updates happen only on confirmed (closed) bars, so no future data is leaked, ensuring reliable real-time operation.
Are there practical tuning tips?
Tune the Lookback Period for your asset/timeframe: shorter for fast markets, longer for stability.
Use custom indicators if your asset has unique regime drivers.
Watch for rapid changes in transition probabilities as early warning of a possible regime shift.
Who is this indicator for?
Quants and quantitative researchers exploring probabilistic market modeling, especially those interested in regime-switching dynamics and Markov models.
Programmers and system developers who need a probabilistic regime filter for systematic and algorithmic backtesting:
The Markov Chain indicator is ideally suited for programmatic integration via its bias output (1 = Bull, 0 = Neutral, -1 = Bear).
Although the visualization is engaging, the core output is designed for automated, rules-based workflows—not for discretionary/manual trading decisions.
Developers can connect the indicator’s output directly to their Pine Script logic (using input.source()), allowing rapid and robust backtesting of regime-based strategies.
It acts as a plug-and-play regime filter: simply plug the bias output into your entry/exit logic, and you have a scientifically robust, probabilistically-derived signal for filtering, timing, position sizing, or risk regimes.
The MC's output is intentionally "trinary" (1/0/-1), focusing on clear regime states for unambiguous decision-making in code. If you require nuanced, multi-probability or soft-label state vectors, consider expanding the indicator or stacking it with a probability-weighted logic layer in your scripting.
Because it avoids subjectivity, this approach is optimal for systematic quants, algo developers building backtested, repeatable strategies based on probabilistic regime analysis.
What's the mathematical foundation behind this?
The mathematical foundation behind this Markov Chain indicator—and probabilistic regime detection in finance—draws from two principal models: the (standard) Markov Chain and the Hidden Markov Model (HMM).
How to use this indicator programmatically?
The Markov Chain indicator automatically exports a bias value (+1 for Bullish, -1 for Bearish, 0 for Neutral) as a plot visible in the Data Window. This allows you to integrate its regime signal into your own scripts and strategies for backtesting, automation, or live trading.
Step-by-Step Integration with Pine Script (input.source)
Add the Markov Chain indicator to your chart.
This must be done first, since your custom script will "pull" the bias signal from the indicator's plot.
In your strategy, create an input using input.source()
Example:
//@version=5
strategy("MC Bias Strategy Example")
mcBias = input.source(close, "MC Bias Source")
After saving, go to your script’s settings. For the “MC Bias Source” input, select the plot/output of the Markov Chain indicator (typically its bias plot).
Use the bias in your trading logic
Example (long only on Bull, flat otherwise):
if mcBias == 1
strategy.entry("Long", strategy.long)
else
strategy.close("Long")
For more advanced workflows, combine mcBias with additional filters or trailing stops.
How does this work behind-the-scenes?
TradingView’s input.source() lets you use any plot from another indicator as a real-time, “live” data feed in your own script (source).
The selected bias signal is available to your Pine code as a variable, enabling logical decisions based on regime (trend-following, mean-reversion, etc.).
This enables powerful strategy modularity : decouple regime detection from entry/exit logic, allowing fast experimentation without rewriting core signal code.
Integrating 45+ Indicators with Your Markov Chain — How & Why
The Enhanced Custom Indicators Export script exports a massive suite of over 45 technical indicators—ranging from classic momentum (RSI, MACD, Stochastic, etc.) to trend, volume, volatility, and oscillator tools—all pre-calculated, centered/scaled, and available as plots.
// Enhanced Custom Indicators Export - 45 Technical Indicators
// Comprehensive technical analysis suite for advanced market regime detection
//@version=6
indicator('Enhanced Custom Indicators Export | Fractalyst', shorttitle='Enhanced CI Export', overlay=false, scale=scale.right, max_labels_count=500, max_lines_count=500)
// |----- Input Parameters -----| //
momentum_group = "Momentum Indicators"
trend_group = "Trend Indicators"
volume_group = "Volume Indicators"
volatility_group = "Volatility Indicators"
oscillator_group = "Oscillator Indicators"
display_group = "Display Settings"
// Common lengths
length_14 = input.int(14, "Standard Length (14)", minval=1, maxval=100, group=momentum_group)
length_20 = input.int(20, "Medium Length (20)", minval=1, maxval=200, group=trend_group)
length_50 = input.int(50, "Long Length (50)", minval=1, maxval=200, group=trend_group)
// Display options
show_table = input.bool(true, "Show Values Table", group=display_group)
table_size = input.string("Small", "Table Size", options= , group=display_group)
// |----- MOMENTUM INDICATORS (15 indicators) -----| //
// 1. RSI (Relative Strength Index)
rsi_14 = ta.rsi(close, length_14)
rsi_centered = rsi_14 - 50
// 2. Stochastic Oscillator
stoch_k = ta.stoch(close, high, low, length_14)
stoch_d = ta.sma(stoch_k, 3)
stoch_centered = stoch_k - 50
// 3. Williams %R
williams_r = ta.stoch(close, high, low, length_14) - 100
// 4. MACD (Moving Average Convergence Divergence)
= ta.macd(close, 12, 26, 9)
// 5. Momentum (Rate of Change)
momentum = ta.mom(close, length_14)
momentum_pct = (momentum / close ) * 100
// 6. Rate of Change (ROC)
roc = ta.roc(close, length_14)
// 7. Commodity Channel Index (CCI)
cci = ta.cci(close, length_20)
// 8. Money Flow Index (MFI)
mfi = ta.mfi(close, length_14)
mfi_centered = mfi - 50
// 9. Awesome Oscillator (AO)
ao = ta.sma(hl2, 5) - ta.sma(hl2, 34)
// 10. Accelerator Oscillator (AC)
ac = ao - ta.sma(ao, 5)
// 11. Chande Momentum Oscillator (CMO)
cmo = ta.cmo(close, length_14)
// 12. Detrended Price Oscillator (DPO)
dpo = close - ta.sma(close, length_20)
// 13. Price Oscillator (PPO)
ppo = ta.sma(close, 12) - ta.sma(close, 26)
ppo_pct = (ppo / ta.sma(close, 26)) * 100
// 14. TRIX
trix_ema1 = ta.ema(close, length_14)
trix_ema2 = ta.ema(trix_ema1, length_14)
trix_ema3 = ta.ema(trix_ema2, length_14)
trix = ta.roc(trix_ema3, 1) * 10000
// 15. Klinger Oscillator
klinger = ta.ema(volume * (high + low + close) / 3, 34) - ta.ema(volume * (high + low + close) / 3, 55)
// 16. Fisher Transform
fisher_hl2 = 0.5 * (hl2 - ta.lowest(hl2, 10)) / (ta.highest(hl2, 10) - ta.lowest(hl2, 10)) - 0.25
fisher = 0.5 * math.log((1 + fisher_hl2) / (1 - fisher_hl2))
// 17. Stochastic RSI
stoch_rsi = ta.stoch(rsi_14, rsi_14, rsi_14, length_14)
stoch_rsi_centered = stoch_rsi - 50
// 18. Relative Vigor Index (RVI)
rvi_num = ta.swma(close - open)
rvi_den = ta.swma(high - low)
rvi = rvi_den != 0 ? rvi_num / rvi_den : 0
// 19. Balance of Power (BOP)
bop = (close - open) / (high - low)
// |----- TREND INDICATORS (10 indicators) -----| //
// 20. Simple Moving Average Momentum
sma_20 = ta.sma(close, length_20)
sma_momentum = ((close - sma_20) / sma_20) * 100
// 21. Exponential Moving Average Momentum
ema_20 = ta.ema(close, length_20)
ema_momentum = ((close - ema_20) / ema_20) * 100
// 22. Parabolic SAR
sar = ta.sar(0.02, 0.02, 0.2)
sar_trend = close > sar ? 1 : -1
// 23. Linear Regression Slope
lr_slope = ta.linreg(close, length_20, 0) - ta.linreg(close, length_20, 1)
// 24. Moving Average Convergence (MAC)
mac = ta.sma(close, 10) - ta.sma(close, 30)
// 25. Trend Intensity Index (TII)
tii_sum = 0.0
for i = 1 to length_20
tii_sum += close > close ? 1 : 0
tii = (tii_sum / length_20) * 100
// 26. Ichimoku Cloud Components
ichimoku_tenkan = (ta.highest(high, 9) + ta.lowest(low, 9)) / 2
ichimoku_kijun = (ta.highest(high, 26) + ta.lowest(low, 26)) / 2
ichimoku_signal = ichimoku_tenkan > ichimoku_kijun ? 1 : -1
// 27. MESA Adaptive Moving Average (MAMA)
mama_alpha = 2.0 / (length_20 + 1)
mama = ta.ema(close, length_20)
mama_momentum = ((close - mama) / mama) * 100
// 28. Zero Lag Exponential Moving Average (ZLEMA)
zlema_lag = math.round((length_20 - 1) / 2)
zlema_data = close + (close - close )
zlema = ta.ema(zlema_data, length_20)
zlema_momentum = ((close - zlema) / zlema) * 100
// |----- VOLUME INDICATORS (6 indicators) -----| //
// 29. On-Balance Volume (OBV)
obv = ta.obv
// 30. Volume Rate of Change (VROC)
vroc = ta.roc(volume, length_14)
// 31. Price Volume Trend (PVT)
pvt = ta.pvt
// 32. Negative Volume Index (NVI)
nvi = 0.0
nvi := volume < volume ? nvi + ((close - close ) / close ) * nvi : nvi
// 33. Positive Volume Index (PVI)
pvi = 0.0
pvi := volume > volume ? pvi + ((close - close ) / close ) * pvi : pvi
// 34. Volume Oscillator
vol_osc = ta.sma(volume, 5) - ta.sma(volume, 10)
// 35. Ease of Movement (EOM)
eom_distance = high - low
eom_box_height = volume / 1000000
eom = eom_box_height != 0 ? eom_distance / eom_box_height : 0
eom_sma = ta.sma(eom, length_14)
// 36. Force Index
force_index = volume * (close - close )
force_index_sma = ta.sma(force_index, length_14)
// |----- VOLATILITY INDICATORS (10 indicators) -----| //
// 37. Average True Range (ATR)
atr = ta.atr(length_14)
atr_pct = (atr / close) * 100
// 38. Bollinger Bands Position
bb_basis = ta.sma(close, length_20)
bb_dev = 2.0 * ta.stdev(close, length_20)
bb_upper = bb_basis + bb_dev
bb_lower = bb_basis - bb_dev
bb_position = bb_dev != 0 ? (close - bb_basis) / bb_dev : 0
bb_width = bb_dev != 0 ? (bb_upper - bb_lower) / bb_basis * 100 : 0
// 39. Keltner Channels Position
kc_basis = ta.ema(close, length_20)
kc_range = ta.ema(ta.tr, length_20)
kc_upper = kc_basis + (2.0 * kc_range)
kc_lower = kc_basis - (2.0 * kc_range)
kc_position = kc_range != 0 ? (close - kc_basis) / kc_range : 0
// 40. Donchian Channels Position
dc_upper = ta.highest(high, length_20)
dc_lower = ta.lowest(low, length_20)
dc_basis = (dc_upper + dc_lower) / 2
dc_position = (dc_upper - dc_lower) != 0 ? (close - dc_basis) / (dc_upper - dc_lower) : 0
// 41. Standard Deviation
std_dev = ta.stdev(close, length_20)
std_dev_pct = (std_dev / close) * 100
// 42. Relative Volatility Index (RVI)
rvi_up = ta.stdev(close > close ? close : 0, length_14)
rvi_down = ta.stdev(close < close ? close : 0, length_14)
rvi_total = rvi_up + rvi_down
rvi_volatility = rvi_total != 0 ? (rvi_up / rvi_total) * 100 : 50
// 43. Historical Volatility
hv_returns = math.log(close / close )
hv = ta.stdev(hv_returns, length_20) * math.sqrt(252) * 100
// 44. Garman-Klass Volatility
gk_vol = math.log(high/low) * math.log(high/low) - (2*math.log(2)-1) * math.log(close/open) * math.log(close/open)
gk_volatility = math.sqrt(ta.sma(gk_vol, length_20)) * 100
// 45. Parkinson Volatility
park_vol = math.log(high/low) * math.log(high/low)
parkinson = math.sqrt(ta.sma(park_vol, length_20) / (4 * math.log(2))) * 100
// 46. Rogers-Satchell Volatility
rs_vol = math.log(high/close) * math.log(high/open) + math.log(low/close) * math.log(low/open)
rogers_satchell = math.sqrt(ta.sma(rs_vol, length_20)) * 100
// |----- OSCILLATOR INDICATORS (5 indicators) -----| //
// 47. Elder Ray Index
elder_bull = high - ta.ema(close, 13)
elder_bear = low - ta.ema(close, 13)
elder_power = elder_bull + elder_bear
// 48. Schaff Trend Cycle (STC)
stc_macd = ta.ema(close, 23) - ta.ema(close, 50)
stc_k = ta.stoch(stc_macd, stc_macd, stc_macd, 10)
stc_d = ta.ema(stc_k, 3)
stc = ta.stoch(stc_d, stc_d, stc_d, 10)
// 49. Coppock Curve
coppock_roc1 = ta.roc(close, 14)
coppock_roc2 = ta.roc(close, 11)
coppock = ta.wma(coppock_roc1 + coppock_roc2, 10)
// 50. Know Sure Thing (KST)
kst_roc1 = ta.roc(close, 10)
kst_roc2 = ta.roc(close, 15)
kst_roc3 = ta.roc(close, 20)
kst_roc4 = ta.roc(close, 30)
kst = ta.sma(kst_roc1, 10) + 2*ta.sma(kst_roc2, 10) + 3*ta.sma(kst_roc3, 10) + 4*ta.sma(kst_roc4, 15)
// 51. Percentage Price Oscillator (PPO)
ppo_line = ((ta.ema(close, 12) - ta.ema(close, 26)) / ta.ema(close, 26)) * 100
ppo_signal = ta.ema(ppo_line, 9)
ppo_histogram = ppo_line - ppo_signal
// |----- PLOT MAIN INDICATORS -----| //
// Plot key momentum indicators
plot(rsi_centered, title="01_RSI_Centered", color=color.purple, linewidth=1)
plot(stoch_centered, title="02_Stoch_Centered", color=color.blue, linewidth=1)
plot(williams_r, title="03_Williams_R", color=color.red, linewidth=1)
plot(macd_histogram, title="04_MACD_Histogram", color=color.orange, linewidth=1)
plot(cci, title="05_CCI", color=color.green, linewidth=1)
// Plot trend indicators
plot(sma_momentum, title="06_SMA_Momentum", color=color.navy, linewidth=1)
plot(ema_momentum, title="07_EMA_Momentum", color=color.maroon, linewidth=1)
plot(sar_trend, title="08_SAR_Trend", color=color.teal, linewidth=1)
plot(lr_slope, title="09_LR_Slope", color=color.lime, linewidth=1)
plot(mac, title="10_MAC", color=color.fuchsia, linewidth=1)
// Plot volatility indicators
plot(atr_pct, title="11_ATR_Pct", color=color.yellow, linewidth=1)
plot(bb_position, title="12_BB_Position", color=color.aqua, linewidth=1)
plot(kc_position, title="13_KC_Position", color=color.olive, linewidth=1)
plot(std_dev_pct, title="14_StdDev_Pct", color=color.silver, linewidth=1)
plot(bb_width, title="15_BB_Width", color=color.gray, linewidth=1)
// Plot volume indicators
plot(vroc, title="16_VROC", color=color.blue, linewidth=1)
plot(eom_sma, title="17_EOM", color=color.red, linewidth=1)
plot(vol_osc, title="18_Vol_Osc", color=color.green, linewidth=1)
plot(force_index_sma, title="19_Force_Index", color=color.orange, linewidth=1)
plot(obv, title="20_OBV", color=color.purple, linewidth=1)
// Plot additional oscillators
plot(ao, title="21_Awesome_Osc", color=color.navy, linewidth=1)
plot(cmo, title="22_CMO", color=color.maroon, linewidth=1)
plot(dpo, title="23_DPO", color=color.teal, linewidth=1)
plot(trix, title="24_TRIX", color=color.lime, linewidth=1)
plot(fisher, title="25_Fisher", color=color.fuchsia, linewidth=1)
// Plot more momentum indicators
plot(mfi_centered, title="26_MFI_Centered", color=color.yellow, linewidth=1)
plot(ac, title="27_AC", color=color.aqua, linewidth=1)
plot(ppo_pct, title="28_PPO_Pct", color=color.olive, linewidth=1)
plot(stoch_rsi_centered, title="29_StochRSI_Centered", color=color.silver, linewidth=1)
plot(klinger, title="30_Klinger", color=color.gray, linewidth=1)
// Plot trend continuation
plot(tii, title="31_TII", color=color.blue, linewidth=1)
plot(ichimoku_signal, title="32_Ichimoku_Signal", color=color.red, linewidth=1)
plot(mama_momentum, title="33_MAMA_Momentum", color=color.green, linewidth=1)
plot(zlema_momentum, title="34_ZLEMA_Momentum", color=color.orange, linewidth=1)
plot(bop, title="35_BOP", color=color.purple, linewidth=1)
// Plot volume continuation
plot(nvi, title="36_NVI", color=color.navy, linewidth=1)
plot(pvi, title="37_PVI", color=color.maroon, linewidth=1)
plot(momentum_pct, title="38_Momentum_Pct", color=color.teal, linewidth=1)
plot(roc, title="39_ROC", color=color.lime, linewidth=1)
plot(rvi, title="40_RVI", color=color.fuchsia, linewidth=1)
// Plot volatility continuation
plot(dc_position, title="41_DC_Position", color=color.yellow, linewidth=1)
plot(rvi_volatility, title="42_RVI_Volatility", color=color.aqua, linewidth=1)
plot(hv, title="43_Historical_Vol", color=color.olive, linewidth=1)
plot(gk_volatility, title="44_GK_Volatility", color=color.silver, linewidth=1)
plot(parkinson, title="45_Parkinson_Vol", color=color.gray, linewidth=1)
// Plot final oscillators
plot(rogers_satchell, title="46_RS_Volatility", color=color.blue, linewidth=1)
plot(elder_power, title="47_Elder_Power", color=color.red, linewidth=1)
plot(stc, title="48_STC", color=color.green, linewidth=1)
plot(coppock, title="49_Coppock", color=color.orange, linewidth=1)
plot(kst, title="50_KST", color=color.purple, linewidth=1)
// Plot final indicators
plot(ppo_histogram, title="51_PPO_Histogram", color=color.navy, linewidth=1)
plot(pvt, title="52_PVT", color=color.maroon, linewidth=1)
// |----- Reference Lines -----| //
hline(0, "Zero Line", color=color.gray, linestyle=hline.style_dashed, linewidth=1)
hline(50, "Midline", color=color.gray, linestyle=hline.style_dotted, linewidth=1)
hline(-50, "Lower Midline", color=color.gray, linestyle=hline.style_dotted, linewidth=1)
hline(25, "Upper Threshold", color=color.gray, linestyle=hline.style_dotted, linewidth=1)
hline(-25, "Lower Threshold", color=color.gray, linestyle=hline.style_dotted, linewidth=1)
// |----- Enhanced Information Table -----| //
if show_table and barstate.islast
table_position = position.top_right
table_text_size = table_size == "Tiny" ? size.tiny : table_size == "Small" ? size.small : size.normal
var table info_table = table.new(table_position, 3, 18, bgcolor=color.new(color.white, 85), border_width=1, border_color=color.gray)
// Headers
table.cell(info_table, 0, 0, 'Category', text_color=color.black, text_size=table_text_size, bgcolor=color.new(color.blue, 70))
table.cell(info_table, 1, 0, 'Indicator', text_color=color.black, text_size=table_text_size, bgcolor=color.new(color.blue, 70))
table.cell(info_table, 2, 0, 'Value', text_color=color.black, text_size=table_text_size, bgcolor=color.new(color.blue, 70))
// Key Momentum Indicators
table.cell(info_table, 0, 1, 'MOMENTUM', text_color=color.purple, text_size=table_text_size, bgcolor=color.new(color.purple, 90))
table.cell(info_table, 1, 1, 'RSI Centered', text_color=color.purple, text_size=table_text_size)
table.cell(info_table, 2, 1, str.tostring(rsi_centered, '0.00'), text_color=color.purple, text_size=table_text_size)
table.cell(info_table, 0, 2, '', text_color=color.blue, text_size=table_text_size)
table.cell(info_table, 1, 2, 'Stoch Centered', text_color=color.blue, text_size=table_text_size)
table.cell(info_table, 2, 2, str.tostring(stoch_centered, '0.00'), text_color=color.blue, text_size=table_text_size)
table.cell(info_table, 0, 3, '', text_color=color.red, text_size=table_text_size)
table.cell(info_table, 1, 3, 'Williams %R', text_color=color.red, text_size=table_text_size)
table.cell(info_table, 2, 3, str.tostring(williams_r, '0.00'), text_color=color.red, text_size=table_text_size)
table.cell(info_table, 0, 4, '', text_color=color.orange, text_size=table_text_size)
table.cell(info_table, 1, 4, 'MACD Histogram', text_color=color.orange, text_size=table_text_size)
table.cell(info_table, 2, 4, str.tostring(macd_histogram, '0.000'), text_color=color.orange, text_size=table_text_size)
table.cell(info_table, 0, 5, '', text_color=color.green, text_size=table_text_size)
table.cell(info_table, 1, 5, 'CCI', text_color=color.green, text_size=table_text_size)
table.cell(info_table, 2, 5, str.tostring(cci, '0.00'), text_color=color.green, text_size=table_text_size)
// Key Trend Indicators
table.cell(info_table, 0, 6, 'TREND', text_color=color.navy, text_size=table_text_size, bgcolor=color.new(color.navy, 90))
table.cell(info_table, 1, 6, 'SMA Momentum %', text_color=color.navy, text_size=table_text_size)
table.cell(info_table, 2, 6, str.tostring(sma_momentum, '0.00'), text_color=color.navy, text_size=table_text_size)
table.cell(info_table, 0, 7, '', text_color=color.maroon, text_size=table_text_size)
table.cell(info_table, 1, 7, 'EMA Momentum %', text_color=color.maroon, text_size=table_text_size)
table.cell(info_table, 2, 7, str.tostring(ema_momentum, '0.00'), text_color=color.maroon, text_size=table_text_size)
table.cell(info_table, 0, 8, '', text_color=color.teal, text_size=table_text_size)
table.cell(info_table, 1, 8, 'SAR Trend', text_color=color.teal, text_size=table_text_size)
table.cell(info_table, 2, 8, str.tostring(sar_trend, '0'), text_color=color.teal, text_size=table_text_size)
table.cell(info_table, 0, 9, '', text_color=color.lime, text_size=table_text_size)
table.cell(info_table, 1, 9, 'Linear Regression', text_color=color.lime, text_size=table_text_size)
table.cell(info_table, 2, 9, str.tostring(lr_slope, '0.000'), text_color=color.lime, text_size=table_text_size)
// Key Volatility Indicators
table.cell(info_table, 0, 10, 'VOLATILITY', text_color=color.yellow, text_size=table_text_size, bgcolor=color.new(color.yellow, 90))
table.cell(info_table, 1, 10, 'ATR %', text_color=color.yellow, text_size=table_text_size)
table.cell(info_table, 2, 10, str.tostring(atr_pct, '0.00'), text_color=color.yellow, text_size=table_text_size)
table.cell(info_table, 0, 11, '', text_color=color.aqua, text_size=table_text_size)
table.cell(info_table, 1, 11, 'BB Position', text_color=color.aqua, text_size=table_text_size)
table.cell(info_table, 2, 11, str.tostring(bb_position, '0.00'), text_color=color.aqua, text_size=table_text_size)
table.cell(info_table, 0, 12, '', text_color=color.olive, text_size=table_text_size)
table.cell(info_table, 1, 12, 'KC Position', text_color=color.olive, text_size=table_text_size)
table.cell(info_table, 2, 12, str.tostring(kc_position, '0.00'), text_color=color.olive, text_size=table_text_size)
// Key Volume Indicators
table.cell(info_table, 0, 13, 'VOLUME', text_color=color.blue, text_size=table_text_size, bgcolor=color.new(color.blue, 90))
table.cell(info_table, 1, 13, 'Volume ROC', text_color=color.blue, text_size=table_text_size)
table.cell(info_table, 2, 13, str.tostring(vroc, '0.00'), text_color=color.blue, text_size=table_text_size)
table.cell(info_table, 0, 14, '', text_color=color.red, text_size=table_text_size)
table.cell(info_table, 1, 14, 'EOM', text_color=color.red, text_size=table_text_size)
table.cell(info_table, 2, 14, str.tostring(eom_sma, '0.000'), text_color=color.red, text_size=table_text_size)
// Key Oscillators
table.cell(info_table, 0, 15, 'OSCILLATORS', text_color=color.purple, text_size=table_text_size, bgcolor=color.new(color.purple, 90))
table.cell(info_table, 1, 15, 'Awesome Osc', text_color=color.blue, text_size=table_text_size)
table.cell(info_table, 2, 15, str.tostring(ao, '0.000'), text_color=color.blue, text_size=table_text_size)
table.cell(info_table, 0, 16, '', text_color=color.red, text_size=table_text_size)
table.cell(info_table, 1, 16, 'Fisher Transform', text_color=color.red, text_size=table_text_size)
table.cell(info_table, 2, 16, str.tostring(fisher, '0.000'), text_color=color.red, text_size=table_text_size)
// Summary Statistics
table.cell(info_table, 0, 17, 'SUMMARY', text_color=color.black, text_size=table_text_size, bgcolor=color.new(color.gray, 70))
table.cell(info_table, 1, 17, 'Total Indicators: 52', text_color=color.black, text_size=table_text_size)
regime_color = rsi_centered > 10 ? color.green : rsi_centered < -10 ? color.red : color.gray
regime_text = rsi_centered > 10 ? "BULLISH" : rsi_centered < -10 ? "BEARISH" : "NEUTRAL"
table.cell(info_table, 2, 17, regime_text, text_color=regime_color, text_size=table_text_size)
This makes it the perfect “indicator backbone” for quantitative and systematic traders who want to prototype, combine, and test new regime detection models—especially in combination with the Markov Chain indicator.
How to use this script with the Markov Chain for research and backtesting:
Add the Enhanced Indicator Export to your chart.
Every calculated indicator is available as an individual data stream.
Connect the indicator(s) you want as custom input(s) to the Markov Chain’s “Custom Indicators” option.
In the Markov Chain indicator’s settings, turn ON the custom indicator mode.
For each of the three custom indicator inputs, select the exported plot from the Enhanced Export script—the menu lists all 45+ signals by name.
This creates a powerful, modular regime-detection engine where you can mix-and-match momentum, trend, volume, or custom combinations for advanced filtering.
Backtest regime logic directly.
Once you’ve connected your chosen indicators, the Markov Chain script performs regime detection (Bull/Neutral/Bear) based on your selected features—not just price returns.
The regime detection is robust, automatically normalized (using Z-score), and outputs bias (1, -1, 0) for plug-and-play integration.
Export the regime bias for programmatic use.
As described above, use input.source() in your Pine Script strategy or system and link the bias output.
You can now filter signals, control trade direction/size, or design pairs-trading that respect true, indicator-driven market regimes.
With this framework, you’re not limited to static or simplistic regime filters. You can rigorously define, test, and refine what “market regime” means for your strategies—using the technical features that matter most to you.
Optimize your signal generation by backtesting across a universe of meaningful indicator blends.
Enhance risk management with objective, real-time regime boundaries.
Accelerate your research: iterate quickly, swap indicator components, and see results with minimal code changes.
Automate multi-asset or pairs-trading by integrating regime context directly into strategy logic.
Add both scripts to your chart, connect your preferred features, and start investigating your best regime-based trades—entirely within the TradingView ecosystem.
References & Further Reading
Ang, A., & Bekaert, G. (2002). “Regime Switches in Interest Rates.” Journal of Business & Economic Statistics, 20(2), 163–182.
Hamilton, J. D. (1989). “A New Approach to the Economic Analysis of Nonstationary Time Series and the Business Cycle.” Econometrica, 57(2), 357–384.
Markov, A. A. (1906). "Extension of the Limit Theorems of Probability Theory to a Sum of Variables Connected in a Chain." The Notes of the Imperial Academy of Sciences of St. Petersburg.
Guidolin, M., & Timmermann, A. (2007). “Asset Allocation under Multivariate Regime Switching.” Journal of Economic Dynamics and Control, 31(11), 3503–3544.
Murphy, J. J. (1999). Technical Analysis of the Financial Markets. New York Institute of Finance.
Brock, W., Lakonishok, J., & LeBaron, B. (1992). “Simple Technical Trading Rules and the Stochastic Properties of Stock Returns.” Journal of Finance, 47(5), 1731–1764.
Zucchini, W., MacDonald, I. L., & Langrock, R. (2017). Hidden Markov Models for Time Series: An Introduction Using R (2nd ed.). Chapman and Hall/CRC.
On Quantitative Finance and Markov Models:
Lo, A. W., & Hasanhodzic, J. (2009). The Heretics of Finance: Conversations with Leading Practitioners of Technical Analysis. Bloomberg Press.
Patterson, S. (2016). The Man Who Solved the Market: How Jim Simons Launched the Quant Revolution. Penguin Press.
TradingView Pine Script Documentation: www.tradingview.com
TradingView Blog: “Use an Input From Another Indicator With Your Strategy” www.tradingview.com
GeeksforGeeks: “What is the Difference Between Markov Chains and Hidden Markov Models?” www.geeksforgeeks.org
What makes this indicator original and unique?
- On‑chart, real‑time Markov. The chain is drawn directly on your chart. You see the current regime, its tendency to stay (self‑loop), and the usual next step (arrows) as bars confirm.
- Source‑agnostic by design. The engine runs on any series you select via input.source() — price, your own oscillator, a composite score, anything you compute in the script.
- Automatic normalization + regime mapping. Different inputs live on different scales. The script standardizes your chosen source and maps it into clear regimes (e.g., Bull / Bear / Neutral) without you micromanaging thresholds each time.
- Rolling, bar‑by‑bar learning. Transition tendencies are computed from a rolling window of confirmed bars. What you see is exactly what the market did in that window.
- Fast experimentation. Switch the source, adjust the window, and the Markov view updates instantly. It’s a rapid way to test ideas and feel regime persistence/switch behavior.
Integrate your own signals (using input.source())
- In settings, choose the Source . This is powered by input.source() .
- Feed it price, an indicator you compute inside the script, or a custom composite series.
- The script will automatically normalize that series and process it through the Markov engine, mapping it to regimes and updating the on‑chart spheres/arrows in real time.
Credits:
Deep gratitude to @RicardoSantos for both the foundational Markov chain processing engine and inspiring open-source contributions, which made advanced probabilistic market modeling accessible to the TradingView community.
Special thanks to @Alien_Algorithms for the innovative and visually stunning 3D sphere logic that powers the indicator’s animated, regime-based visualization.
Disclaimer
This tool summarizes recent behavior. It is not financial advice and not a guarantee of future results.
DTC AIO [India] v2.0DTC AIO v2.0 – Advanced Technical Analysis Suite
This indicator is a comprehensive dashboard designed specifically for Indian equities, providing traders with a unique blend of trend, volatility, volume, and earnings analytics—all in one panel.
Key Features
Multi-Timeframe Volatility Tables:
Instantly view daily, weekly, and monthly Average Daily Range (ADR) values in a compact, color-coded table.
Relative Volume (RVol) Panel:
Displays real-time relative volume in crores, helping you spot unusual activity at a glance.
Strength Gauge:
A proprietary scoring system that quantifies the frequency and magnitude of price bursts, giving you a unique “Strength” score for each symbol.
Earnings & Sales Table:
Automatically fetches and displays quarterly EPS and sales data, with YoY and QoQ growth, color-coded for clarity.
Theme-Aware Design:
All tables and overlays adapt to dark or light chart themes for maximum readability.
Customizable Watermark:
Add your own signature, timeframe, and price change watermark to the chart, with full control over position and color.
Sector & Industry Info:
Instantly see the symbol’s sector and industry in the main metrics table.
How It Works
Trend & Volatility:
Uses a blend of moving averages (user-selectable type and length) and price/volume patterns to highlight actionable setups.
Strength Gauge:
Calculates a proprietary score based on the frequency and size of price bursts over multiple lookback periods. This algorithm is unique to this script and not available in open-source alternatives.
Relative Volume:
Compares current volume to historical averages, displaying the result in crores for Indian market conventions.
Earnings Table:
Fetches the last four quarters of EPS and sales, automatically calculating and color-coding YoY and QoQ growth.
All tables and overlays are locked to price and update in real time.
How to Use
Add the indicator to your chart.
Customize table positions, watermark, and theme via the settings panel.
Use the dashboard to quickly assess trend, volatility, strength, and earnings for any Indian equity.
Hover over table cells for tooltips and additional information.
Why Closed Source?
This script is closed-source due to the proprietary nature of the “Strength Gauge” algorithm and the integrated dashboard logic, which are not available in open-source scripts. The unique scoring and visualization methods provide a competitive edge for users.
Notes
Designed for Indian equities, but can be used on any symbol.
All calculations are performed in real time and optimized for performance.
For best results, use on daily or higher timeframes.
If you have questions or feedback, please use the TradingView comments section.v
Nifty Dashboard//@version=5
//Author @GODvMarkets
indicator("GOD NSE Nifty Dashboard", "Nifty Dashboard")
i_timeframe = input.timeframe("D", "Timeframe")
// if not timeframe.isdaily
// runtime.error("Please switch timeframe to Daily")
i_text_size = input.string(size.auto, "Text Size", )
//-----------------------Functions-----------------------------------------------------
f_oi_buildup(price_chg_, oi_chg_) =>
switch
price_chg_ > 0 and oi_chg_ > 0 =>
price_chg_ > 0 and oi_chg_ < 0 =>
price_chg_ < 0 and oi_chg_ > 0 =>
price_chg_ < 0 and oi_chg_ < 0 =>
=>
f_color(val_) => val_ > 0 ? color.green : val_ < 0 ? color.red : color.gray
f_bg_color(val_) => val_ > 0 ? color.new(color.green,80) : val_ < 0 ? color.new(color.red,80) : color.new(color.black,80)
f_bg_color_price(val_) =>
fg_color_ = f_color(val_)
abs_val_ = math.abs(val_)
transp_ = switch
abs_val_ > .03 => 40
abs_val_ > .02 => 50
abs_val_ > .01 => 60
=> 80
color.new(fg_color_, transp_)
f_bg_color_oi(val_) =>
fg_color_ = f_color(val_)
abs_val_ = math.abs(val_)
transp_ = switch
abs_val_ > .10 => 40
abs_val_ > .05 => 50
abs_val_ > .025 => 60
=> 80
color.new(fg_color_, transp_)
f_day_of_week(time_=time) =>
switch dayofweek(time_)
1 => "Sun"
2 => "Mon"
3 => "Tue"
4 => "Wed"
5 => "Thu"
6 => "Fri"
7 => "Sat"
//-------------------------------------------------------------------------------------
var table table_ = table.new(position.middle_center, 22, 20, border_width = 1)
var cols_ = 0
var text_color_ = color.white
var bg_color_ = color.rgb(1, 5, 19)
f_symbol(idx_, symbol_) =>
symbol_nse_ = "NSE" + ":" + symbol_
fut_cur_ = "NSE" + ":" + symbol_ + "1!"
fut_next_ = "NSE" + ":" + symbol_ + "2!"
= request.security(symbol_nse_, i_timeframe, [close, close-close , close/close -1, volume], ignore_invalid_symbol = true, lookahead = barmerge.lookahead_on)
= request.security(fut_cur_, i_timeframe, , ignore_invalid_symbol = true, lookahead = barmerge.lookahead_on)
= request.security(fut_next_, i_timeframe, , ignore_invalid_symbol = true, lookahead = barmerge.lookahead_on)
= request.security(fut_cur_ + "_OI", i_timeframe, [close, close-close ], ignore_invalid_symbol = true, lookahead = barmerge.lookahead_on)
= request.security(fut_next_ + "_OI", i_timeframe, [close, close-close ], ignore_invalid_symbol = true, lookahead = barmerge.lookahead_on)
stk_vol_ = stk_vol_nse_
fut_vol_ = fut_cur_vol_ + fut_next_vol_
fut_oi_ = fut_cur_oi_ + fut_next_oi_
fut_oi_chg_ = fut_cur_oi_chg_ + fut_next_oi_chg_
fut_oi_chg_pct_ = fut_oi_chg_ / fut_oi_
fut_stk_vol_x_ = fut_vol_ / stk_vol_
fut_vol_oi_action_ = fut_vol_ / math.abs(fut_oi_chg_)
= f_oi_buildup(chg_pct_, fut_oi_chg_pct_)
close_color_ = fut_cur_close_ > fut_vwap_ ? color.green : fut_cur_close_ < fut_vwap_ ? color.red : text_color_
if barstate.isfirst
row_ = 0, col_ = 0
table.cell(table_, col_, row_, "Symbol", text_color = text_color_, bgcolor = bg_color_, text_size = i_text_size), col_ += 1
table.cell(table_, col_, row_, "Close", text_color = text_color_, bgcolor = bg_color_, text_size = i_text_size), col_ += 1
table.cell(table_, col_, row_, "VWAP", text_color = text_color_, bgcolor = bg_color_, text_size = i_text_size), col_ += 1
table.cell(table_, col_, row_, "Pts", text_color = text_color_, bgcolor = bg_color_, text_size = i_text_size), col_ += 1
table.cell(table_, col_, row_, "Stk Vol", text_color = text_color_, bgcolor = bg_color_, text_size = i_text_size), col_ += 1
table.cell(table_, col_, row_, "Fut Vol", text_color = text_color_, bgcolor = bg_color_, text_size = i_text_size), col_ += 1
table.cell(table_, col_, row_, "Fut/Stk Vol", text_color = text_color_, bgcolor = bg_color_, text_size = i_text_size), col_ += 1
table.cell(table_, col_, row_, "OI Cur", text_color = text_color_, bgcolor = bg_color_, text_size = i_text_size), col_ += 1
table.cell(table_, col_, row_, "OI Next", text_color = text_color_, bgcolor = bg_color_, text_size = i_text_size), col_ += 1
table.cell(table_, col_, row_, "OI Cur Chg", text_color = text_color_, bgcolor = bg_color_, text_size = i_text_size), col_ += 1
table.cell(table_, col_, row_, "OI Next Chg", text_color = text_color_, bgcolor = bg_color_, text_size = i_text_size), col_ += 1
table.cell(table_, col_, row_, "COI ", text_color = text_color_, bgcolor = bg_color_, text_size = i_text_size), col_ += 1
table.cell(table_, col_, row_, "COI Chg", text_color = text_color_, bgcolor = bg_color_, text_size = i_text_size), col_ += 1
table.cell(table_, col_, row_, "Vol/OI Chg", text_color = text_color_, bgcolor = bg_color_, text_size = i_text_size), col_ += 1
table.cell(table_, col_, row_, "COI Chg%", text_color = text_color_, bgcolor = bg_color_, text_size = i_text_size), col_ += 1
table.cell(table_, col_, row_, "Pr.Chg%", text_color = text_color_, bgcolor = bg_color_, text_size = i_text_size), col_ += 1
table.cell(table_, col_, row_, "OI Buildup", text_color = text_color_, bgcolor = bg_color_, text_size = i_text_size), col_ += 1
cell_color_ = color.white
cell_bg_color_ = color.rgb(1, 7, 24)
if barstate.islast
row_ = idx_, col_ = 0
table.cell(table_, col_, row_, str.format("{0}", symbol_), text_color = f_color(chg_pct_), bgcolor = f_bg_color_price(chg_pct_), text_size = i_text_size, text_halign = text.align_left), col_ += 1
table.cell(table_, col_, row_, str.format("{0,number,#.00}", fut_cur_close_), text_color = close_color_, bgcolor = cell_bg_color_, text_size = i_text_size, text_halign = text.align_right), col_ += 1
table.cell(table_, col_, row_, str.format("{0,number,#.00}", fut_vwap_), text_color = cell_color_, bgcolor = cell_bg_color_, text_size = i_text_size, text_halign = text.align_right), col_ += 1
table.cell(table_, col_, row_, str.format("{0,number,0.00}", chg_pts_), text_color = cell_color_, bgcolor = cell_bg_color_, text_size = i_text_size, text_halign = text.align_right), col_ += 1
table.cell(table_, col_, row_, str.format("{0,number,#,###}", stk_vol_), text_color = cell_color_, bgcolor = cell_bg_color_, text_size = i_text_size, text_halign = text.align_right), col_ += 1
table.cell(table_, col_, row_, str.format("{0,number,#,###}", fut_vol_), text_color = cell_color_, bgcolor = cell_bg_color_, text_size = i_text_size, text_halign = text.align_right), col_ += 1
table.cell(table_, col_, row_, str.format("{0,number,0.00}", fut_stk_vol_x_), text_color = cell_color_, bgcolor = cell_bg_color_, text_size = i_text_size, text_halign = text.align_right), col_ += 1
table.cell(table_, col_, row_, str.format("{0,number,#,###}", fut_cur_oi_), text_color = cell_color_, bgcolor = cell_bg_color_, text_size = i_text_size, text_halign = text.align_right), col_ += 1
table.cell(table_, col_, row_, str.format("{0,number,#,###}", fut_next_oi_), text_color = cell_color_, bgcolor = cell_bg_color_, text_size = i_text_size, text_halign = text.align_right), col_ += 1
table.cell(table_, col_, row_, str.format("{0,number,#,###}", fut_cur_oi_chg_), text_color = f_color(fut_cur_oi_chg_), bgcolor = f_bg_color(fut_cur_oi_chg_), text_size = i_text_size, text_halign = text.align_right), col_ += 1
table.cell(table_, col_, row_, str.format("{0,number,#,###}", fut_next_oi_chg_), text_color = f_color(fut_next_oi_chg_), bgcolor = f_bg_color(fut_next_oi_chg_), text_size = i_text_size, text_halign = text.align_right), col_ += 1
table.cell(table_, col_, row_, str.format("{0,number,#,###}", fut_oi_), text_color = cell_color_, bgcolor = cell_bg_color_, text_size = i_text_size, text_halign = text.align_right), col_ += 1
table.cell(table_, col_, row_, str.format("{0,number,#,###}", fut_oi_chg_), text_color = f_color(fut_oi_chg_), bgcolor = f_bg_color(fut_oi_chg_), text_size = i_text_size, text_halign = text.align_right), col_ += 1
table.cell(table_, col_, row_, str.format("{0,number,0.00}", fut_vol_oi_action_), text_color = cell_color_, bgcolor = cell_bg_color_, text_size = i_text_size, text_halign = text.align_right), col_ += 1
table.cell(table_, col_, row_, str.format("{0,number,0.00%}", fut_oi_chg_pct_), text_color = f_color(fut_oi_chg_pct_), bgcolor = f_bg_color_oi(fut_oi_chg_pct_), text_size = i_text_size, text_halign = text.align_right), col_ += 1
table.cell(table_, col_, row_, str.format("{0,number,0.00%}", chg_pct_), text_color = f_color(chg_pct_), bgcolor = f_bg_color_price(chg_pct_), text_size = i_text_size, text_halign = text.align_right), col_ += 1
table.cell(table_, col_, row_, str.format("{0}", oi_buildup_), text_color = oi_buildup_color_, bgcolor = color.new(oi_buildup_color_,80), text_size = i_text_size, text_halign = text.align_left), col_ += 1
idx_ = 1
f_symbol(idx_, "BANKNIFTY"), idx_ += 1
f_symbol(idx_, "NIFTY"), idx_ += 1
f_symbol(idx_, "CNXFINANCE"), idx_ += 1
f_symbol(idx_, "RELIANCE"), idx_ += 1
f_symbol(idx_, "HDFC"), idx_ += 1
f_symbol(idx_, "ITC"), idx_ += 1
f_symbol(idx_, "HINDUNILVR"), idx_ += 1
f_symbol(idx_, "INFY"), idx_ += 1
Intrabar Efficiency Ratio█ OVERVIEW
This indicator displays a directional variant of Perry Kaufman's Efficiency Ratio, designed to gauge the "efficiency" of intrabar price movement by comparing the sum of movements of the lower timeframe bars composing a chart bar with the respective bar's movement on an average basis.
█ CONCEPTS
Efficiency Ratio (ER)
Efficiency Ratio was first introduced by Perry Kaufman in his 1995 book, titled "Smarter Trading". It is the ratio of absolute price change to the sum of absolute changes on each bar over a period. This tells us how strong the period's trend is relative to the underlying noise. Simply put, it's a measure of price movement efficiency. This ratio is the modulator utilized in Kaufman's Adaptive Moving Average (KAMA), which is essentially an Exponential Moving Average (EMA) that adapts its responsiveness to movement efficiency.
ER's output is bounded between 0 and 1. A value of 0 indicates that the starting price equals the ending price for the period, which suggests that price movement was maximally inefficient. A value of 1 indicates that price had travelled no more than the distance between the starting price and the ending price for the period, which suggests that price movement was maximally efficient. A value between 0 and 1 indicates that price had travelled a distance greater than the distance between the starting price and the ending price for the period. In other words, some degree of noise was present which resulted in reduced efficiency over the period.
As an example, let's say that the price of an asset had moved from $15 to $14 by the end of a period, but the sum of absolute changes for each bar of data was $4. ER would be calculated like so:
ER = abs(14 - 15)/4 = 0.25
This suggests that the trend was only 25% efficient over the period, as the total distanced travelled by price was four times what was required to achieve the change over the period.
Intrabars
Intrabars are chart bars at a lower timeframe than the chart's. Each 1H chart bar of a 24x7 market will, for example, usually contain 60 intrabars at the LTF of 1min, provided there was market activity during each minute of the hour. Mining information from intrabars can be useful in that it offers traders visibility on the activity inside a chart bar.
Lower timeframes (LTFs)
A lower timeframe is a timeframe that is smaller than the chart's timeframe. This script determines which LTF to use by examining the chart's timeframe. The LTF determines how many intrabars are examined for each chart bar; the lower the timeframe, the more intrabars are analyzed, but fewer chart bars can display indicator information because there is a limit to the total number of intrabars that can be analyzed.
Intrabar precision
The precision of calculations increases with the number of intrabars analyzed for each chart bar. As there is a 100K limit to the number of intrabars that can be analyzed by a script, a trade-off occurs between the number of intrabars analyzed per chart bar and the chart bars for which calculations are possible.
Intrabar Efficiency Ratio (IER)
Intrabar Efficiency Ratio applies the concept of ER on an intrabar level. Rather than comparing the overall change to the sum of bar changes for the current chart's timeframe over a period, IER compares single bar changes for the current chart's timeframe to the sum of absolute intrabar changes, then applies smoothing to the result. This gives an indication of how efficient changes are on the current chart's timeframe for each bar of data relative to LTF bar changes on an average basis. Unlike the standard ER calculation, we've opted to preserve directional information by not taking the absolute value of overall change, thus allowing it to be utilized as a momentum oscillator. However, by taking the absolute value of this oscillator, it could potentially serve as a replacement for ER in the design of adaptive moving averages.
Since this indicator preserves directional information, IER can be regarded as similar to the Chande Momentum Oscillator (CMO) , which was presented in 1994 by Tushar Chande in "The New Technical Trader". Both CMO and ER essentially measure the same relationship between trend and noise. CMO simply differs in scale, and considers the direction of overall changes.
█ FEATURES
Display
Three different display types are included within the script:
• Line : Displays the middle length MA of the IER as a line .
Color for this display can be customized via the "Line" portion of the "Visuals" section in the script settings.
• Candles : Displays the non-smooth IER and two moving averages of different lengths as candles .
The `open` and `close` of the candle are the longest and shortest length MAs of the IER respectively.
The `high` and `low` of the candle are the max and min of the IER, longest length MA of the IER, and shortest length MA of the IER respectively.
Colors for this display can be customized via the "Candles" portion of the "Visuals" section in the script settings.
• Circles : Displays three MAs of the IER as circles .
The color of each plot depends on the percent rank of the respective MA over the previous 100 bars.
Different colors are triggered when ranks are below 10%, between 10% and 50%, between 50% and 90%, and above 90%.
Colors for this display can be customized via the "Circles" portion of the "Visuals" section in the script settings.
With either display type, an optional information box can be displayed. This box shows the LTF that the script is using, the average number of lower timeframe bars per chart bar, and the number of chart bars that contain LTF data.
Specifying intrabar precision
Ten options are included in the script to control the number of intrabars used per chart bar for calculations. The greater the number of intrabars per chart bar, the fewer chart bars can be analyzed.
The first five options allow users to specify the approximate amount of chart bars to be covered:
• Least Precise (Most chart bars) : Covers all chart bars by dividing the current timeframe by four.
This ensures the highest level of intrabar precision while achieving complete coverage for the dataset.
• Less Precise (Some chart bars) & More Precise (Less chart bars) : These options calculate a stepped LTF in relation to the current chart's timeframe.
• Very precise (2min intrabars) : Uses the second highest quantity of intrabars possible with the 2min LTF.
• Most precise (1min intrabars) : Uses the maximum quantity of intrabars possible with the 1min LTF.
The stepped lower timeframe for "Less Precise" and "More Precise" options is calculated from the current chart's timeframe as follows:
Chart Timeframe Lower Timeframe
Less Precise More Precise
< 1hr 1min 1min
< 1D 15min 1min
< 1W 2hr 30min
> 1W 1D 60min
The last five options allow users to specify an approximate fixed number of intrabars to analyze per chart bar. The available choices are 12, 24, 50, 100, and 250. The script will calculate the LTF which most closely approximates the specified number of intrabars per chart bar. Keep in mind that due to factors such as the length of a ticker's sessions and rounding of the LTF, it is not always possible to produce the exact number specified. However, the script will do its best to get as close to the value as possible.
Specifying MA type
Seven MA types are included in the script for different averaging effects:
• Simple
• Exponential
• Wilder (RMA)
• Weighted
• Volume-Weighted
• Arnaud Legoux with `offset` and `sigma` set to 0.85 and 6 respectively.
• Hull
Weighting
This script includes the option to weight IER values based on the percent rank of absolute price changes on the current chart's timeframe over a specified period, which can be enabled by checking the "Weigh using relative close changes" option in the script settings. This places reduced emphasis on IER values from smaller changes, which may help to reduce noise in the output.
█ FOR Pine Script™ CODERS
• This script imports the recently published lower_ltf library for calculating intrabar statistics and the optimal lower timeframe in relation to the current chart's timeframe.
• This script uses the recently released request.security_lower_tf() Pine Script™ function discussed in this blog post .
It works differently from the usual request.security() in that it can only be used on LTFs, and it returns an array containing one value per intrabar.
This makes it much easier for programmers to access intrabar information.
• This script implements a new recommended best practice for tables which works faster and reduces memory consumption.
Using this new method, tables are declared only once with var , as usual. Then, on the first bar only, we use table.cell() to populate the table.
Finally, table.set_*() functions are used to update attributes of table cells on the last bar of the dataset.
This greatly reduces the resources required to render tables.
Look first. Then leap.
Super PerformanceThe "Super Performance" script is a custom indicator written in Pine Script (version 6) for use on the TradingView platform. Its main purpose is to visually compare the performance of a selected stock or index against a benchmark index (default: NIFTYMIDSML400) over various timeframes, and to display sector-wise performance rankings in a clear, tabular format.
Key Features:
Customizable Display:
Users can toggle between dark and light color themes, enable or disable extended data columns, and choose between a compact "Mini Mode" or a full-featured table view. Table positions and sizes are also configurable for both stock and sector tables.
Performance Calculation:
The script calculates percentage price changes for the selected stock and the benchmark index over multiple periods: 1, 5, 10, 20, 50, and 200 days. It then checks if the stock is outperforming the index for each period.
Conviction Score:
For each period where the stock outperforms the index, a "conviction score" is incremented. This score is mapped to qualitative labels such as "Super solid," "Solid," "Good," etc., and is color-coded for quick visual interpretation.
Sector Performance Table:
The script tracks 19 sector indices (e.g., REALTY, IT, PHARMA, AUTO, ENERGY) and calculates their performance over 1, 5, 10, 20, and 60-day periods. It then ranks the top 5 performing sectors for each timeframe and displays them in a sector performance table.
Visual Output:
Two tables are constructed:
Stock Performance Table: Shows the stock's returns, index returns, outperformance markers (✔/✖), and the difference for each period, along with the overall conviction score.
Sector Performance Table: Ranks and displays the top 5 sectors for each timeframe, with color-coded performance values for easy comparison.
Seasonality DOW CombinedOverall Purpose
This script analyzes historical daily returns based on two specific criteria:
Month of the year (January through December)
Day of the week (Sunday through Saturday)
It summarizes and visually displays the average historical performance of the selected asset by these criteria over multiple years.
Step-by-Step Breakdown
1. Initial Settings:
Defines minimum year (i_year_start) from which data analysis will start.
Ensures the user is using a daily timeframe, otherwise prompts an error.
Sets basic display preferences like text size and color schemes.
2. Data Collection and Variables:
Initializes matrices to store and aggregate returns data:
month_data_ and month_agg_: store monthly performance.
dow_data_ and dow_agg_: store day-of-week performance.
COUNT tracks total number of occurrences, and COUNT_POSITIVE tracks positive-return occurrences.
3. Return Calculation:
Calculates daily percentage change (chg_pct_) in price:
chg_pct_ = close / close - 1
Ensures it captures this data only for the specified years (year >= i_year_start).
4. Monthly Performance Calculation:
Each daily return is grouped by month:
matrix.set updates total returns per month.
The script tracks:
Monthly cumulative returns
Number of occurrences (how many days recorded per month)
Positive occurrences (days with positive returns)
5. Day-of-Week Performance Calculation:
Similarly, daily returns are also grouped by day-of-the-week (Sunday to Saturday):
Daily return values are summed per weekday.
The script tracks:
Cumulative returns per weekday
Number of occurrences per weekday
Positive occurrences per weekday
6. Visual Display (Tables):
The script creates two visual tables:
Left Table: Monthly Performance.
Right Table: Day-of-the-Week Performance.
For each table, it shows:
Yearly data for each month/day.
Summaries at the bottom:
SUM row: Shows total accumulated returns over all selected years for each month/day.
+ive row: Shows percentage (%) of times the month/day had positive returns, along with a tooltip displaying positive occurrences vs total occurrences.
Cells are color-coded:
Green for positive returns.
Red for negative returns.
Gray for neutral/no change.
7. Interpreting the Tables:
Monthly Table (left side):
Helps identify seasonal patterns (e.g., historically bullish/bearish months).
Day-of-Week Table (right side):
Helps detect recurring weekday patterns (e.g., historically bullish Mondays or bearish Fridays).
Practical Use:
Traders use this to:
Identify patterns based on historical data.
Inform trading strategies, e.g., avoiding historically bearish days/months or leveraging historically bullish periods.
Example Interpretation:
If the table shows consistently green (positive) for March and April, historically the asset tends to perform well during spring. Similarly, if the "Friday" column is often red, historically Fridays are bearish for this asset.
ATR Bands with ATR Cross + InfoTableOverview
This Pine Script™ indicator is designed to enhance traders' ability to analyze market volatility, trend direction, and position sizing directly on their TradingView charts. By plotting Average True Range (ATR) bands anchored at the OHLC4 price, displaying crossover labels, and providing a comprehensive information table, this tool offers a multifaceted approach to technical analysis.
Key Features:
ATR Bands Anchored at OHLC4: Visual representation of short-term and long-term volatility bands centered around the average price.
OHLC4 Dotted Line: A dotted line representing the average of Open, High, Low, and Close prices.
ATR Cross Labels: Visual cues indicating when short-term volatility exceeds long-term volatility and vice versa.
Information Table: Displays real-time data on market volatility, calculated position size based on risk parameters, and trend direction relative to the 20-period Smoothed Moving Average (SMMA).
Purpose
The primary purpose of this indicator is to:
Assess Market Volatility: By comparing short-term and long-term ATR values, traders can gauge the current volatility environment.
Determine Optimal Position Sizing: A calculated position size based on user-defined risk parameters helps in effective risk management.
Identify Trend Direction: Comparing the current price to the 20-period SMMA assists in determining the prevailing market trend.
Enhance Decision-Making: Visual cues and real-time data enable traders to make informed trading decisions with greater confidence.
How It Works
1. ATR Bands Anchored at OHLC4
Average True Range (ATR) Calculations
Short-Term ATR (SA): Calculated over a 9-period using ta.atr(9).
Long-Term ATR (LA): Calculated over a 21-period using ta.atr(21).
Plotting the Bands
OHLC4 Dotted Line: Plotted using small circles to simulate a dotted line due to Pine Script limitations.
ATR(9) Bands: Plotted in blue with semi-transparent shading.
ATR(21) Bands: Plotted in orange with semi-transparent shading.
Overlap: Bands can overlap, providing visual insights into changes in volatility.
2. ATR Cross Labels
Crossover Detection:
SA > LA: Indicates increasing short-term volatility.
Detected using ta.crossover(SA, LA).
A green upward label "SA>LA" is plotted below the bar.
SA < LA: Indicates decreasing short-term volatility.
Detected using ta.crossunder(SA, LA).
A red downward label "SA LA, then the market is considered volatile.
Display: Shows "Yes" or "No" based on the comparison.
b. Position Size Calculation
Risk Total Amount: User-defined input representing the total capital at risk.
Risk per 1 Stock: User-defined input representing the risk associated with one unit of the asset.
Purpose: Helps traders determine the appropriate position size based on their risk tolerance and current market volatility.
c. Is Price > 20 SMMA?
SMMA Calculation:
Calculated using a 20-period Smoothed Moving Average with ta.rma(close, 20).
Logic: If the current close price is above the SMMA, the trend is considered upward.
Display: Shows "Yes" or "No" based on the comparison.
How to Use
Step 1: Add the Indicator to Your Chart
Copy the Script: Copy the entire Pine Script code into the TradingView Pine Editor.
Save and Apply: Save the script and click "Add to Chart."
Step 2: Configure Inputs
Risk Parameters: Adjust the "Risk Total Amount" and "Risk per 1 Stock" in the indicator settings to match your personal risk management strategy.
Step 3: Interpret the Visuals
ATR Bands
Width of Bands: Wider bands indicate higher volatility; narrower bands indicate lower volatility.
Band Overlap: Pay attention to areas where the blue and orange bands diverge or converge.
OHLC4 Dotted Line
Serves as a central reference point for the ATR bands.
Helps visualize the average price around which volatility is measured.
ATR Cross Labels
"SA>LA" Label:
Indicates short-term volatility is increasing relative to long-term volatility.
May signal potential breakout or trend acceleration.
"SA 20 SMMA?
Use this to confirm trend direction before entering or exiting trades.
Practical Example
Imagine you are analyzing a stock and notice the following:
ATR(9) Crosses Above ATR(21):
A green "SA>LA" label appears.
The info table shows "Yes" for "Is ATR-based price volatile."
Position Size:
Based on your risk parameters, the position size is calculated.
Price Above 20 SMMA:
The info table shows "Yes" for "Is price > 20 SMMA."
Interpretation:
The market is experiencing increasing short-term volatility.
The trend is upward, as the price is above the 20 SMMA.
You may consider entering a long position, using the calculated position size to manage risk.
Customization
Colors and Transparency:
Adjust the colors of the bands and labels to suit your preferences.
Risk Parameters:
Modify the default values for risk amounts in the inputs.
Moving Average Period:
Change the SMMA period if desired.
Limitations and Considerations
Lagging Indicators: ATR and SMMA are lagging indicators and may not predict future price movements.
Market Conditions: The effectiveness of this indicator may vary across different assets and market conditions.
Risk of Overfitting: Relying solely on this indicator without considering other factors may lead to suboptimal trading decisions.
Conclusion
This indicator combines essential elements of technical analysis to provide a comprehensive tool for traders. By visualizing ATR bands anchored at the OHLC4, indicating volatility crossovers, and providing real-time data on position sizing and trend direction, it aids in making informed trading decisions.
Whether you're a novice trader looking to understand market volatility or an experienced trader seeking to refine your strategy, this indicator offers valuable insights directly on your TradingView charts.
Code Summary
The script is written in Pine Script™ version 5 and includes:
Calculations for OHLC4, ATRs, Bands, SMMA:
Uses built-in functions like ta.atr() and ta.rma() for calculations.
Plotting Functions:
plotshape() for the OHLC4 dotted line.
plot() and fill() for the ATR bands.
Crossover Detection:
ta.crossover() and ta.crossunder() for detecting ATR crosses.
Labeling Crossovers:
label.new() to place informative labels on the chart.
Information Table Creation:
table.new() to create the table.
table.cell() to populate it with data.
Acknowledgments
ATR and SMMA Concepts: Built upon standard technical analysis concepts widely used in trading.
Pine Script™: Leveraged the capabilities of Pine Script™ version 5 for advanced charting and analysis.
Note: Always test any indicator thoroughly and consider combining it with other forms of analysis before making trading decisions. Trading involves risk, and past performance is not indicative of future results.
Happy Trading!
Symbol Searcher [EmuMoon]Introducing the EmuMoon 'Symbol Searcher'. Your go-to tool for quickly comparing and discovering the best coins/symbols to trade.
With this nifty tool, you can easily search and compare 40+ different coins/symbols simultaneously to find the most volatile ones, while also identifying coins that are already correlated to the ones you're trading. That way, you can diversify your portfolio and avoid putting all your eggs in one basket.🧺🐣
The Symbol Searcher lets you sort by volatility, correlation and weighted combinations of both. You can even input your own coins/symbols to see how they stack up. It's a fun way to explore the crypto/trading market and find new opportunities.
You can also add the 'Symbol Searcher' to the chart multiple times to display even more symbols. This works excellent with the other DCA Tools that are Advanced!
Features
The EmuMoon 'Symbol Searcher' has a number of features, including:
• Optimal Coin Selection - The 'Top Picks' Table automatically populates with coins/symbols exhibiting the most desirable values that are well suited to trading.
• 'Sort By' Drop-Down - Explore a wide range of sorting options to discover coins/symbols that align with your target goals and preferences.
• Lookback Duration - Small or broad, you can specify the quantity of bars/candles that are used when performing internal calculations.
• Customisable View - Choose the Quantity of Pairs to Compare and also separately choose the Quantity of Pairs to Display.
• Real-Time Data - Receive up-to-the-minute data on coins/symbols, pick any time frame interval to make informed and timely choices.
• Quick & Easy - You can search, compare and analyse a wide range of coins with speed and convenience and no complex setup.
• Default Pairs - Carefully selected from Binance USDT Spot, the top 40 pairs with a 'Maximum Supply' based on the highest statistics at the time of creating. Add your own at any time.
• Connectivity - Use on the go, on any device. Settings menu and display tables have been optimized to look great on Mobile as well as PC, Browser, App, Laptop, Mobile, Tablet etc.
• Fast Loading - Streamlined array/table structure means enhanced script compile times, significantly improving script compiling times and timeout errors.
Settings
• Show Main Table - Show or hide the main coin selection table.
• Display X Pairs - Choose how many pairs to display.
• Compare X Pairs - Choose how many pairs to compare.
• Lookback - Choose the quantity of bars/candles to be used for the Correlation and Volatility calculations.
• Sort By - Choose how the main table is sorted.
• Show Top Picks Table - Show or hide the Top Picks Table.
• + Corr X Vol - Choose the quantity of High Correlation + High Volatility coins to show on the Top Picks Table.
• - Corr X Vol - Choose the quantity of Low Correlation + High Volatility coins to show on the Top Picks Table.
• o Corr X Vol - Choose the quantity of Neutral Correlation + High Volatility coins to show on the Top Picks Table.
• Symbol Input 1 - To check for correlation, the script utilizes coin slot number 1 as a reference, comparing it against all the coins numbered 2~40.
• Symbol Inputs 2~40 - Customize the coin inputs (2~40) according to your preference.
• Table Position - Adjust location of table plotted on chart. You can also add the 'Symbol Searcher' to the chart multiple times to display even more symbols. 🎉
• Info & Help - Some great information about the script and its features
• Text Size - Whether you are on PC, App, or Tablet, you can adjust the view to fit your device.
Usage
While statistics provide valuable insights, they should not be solely relied upon as an indicator of future results. This script serves as a tool traders can utilise to help gain an overview of the market landscape, and quickly compare and identify potential opportunities, enhancing their decision-making process. To use the indicator, simply input your chosen coins/symbols or use the defaults, select the quantity you want to compare, choose a sorting option, you can also generate a Top Picks list based on the highest performing values by using the +/-/o Corr X Vol quantity selections.
The Echo System🔊 The Echo System – Trend + Momentum Trading Strategy
Overview:
The Echo System is a trend-following and momentum-based trading tool designed to identify high-probability buy and sell signals through a combination of market trend analysis, price movement strength, and candlestick validation.
Key Features:
📈 Trend Detection:
Uses a 30 EMA vs. 200 EMA crossover to confirm bullish or bearish trends.
Visual trend strength meter powered by percentile ranking of EMA distance.
🔄 Momentum Check:
Detects significant price moves over the past 6 bars, enhanced by ATR-based scaling to filter weak signals.
🕯️ Candle Confirmation:
Validates recent price action using the previous and current candle body direction.
✅ Smart Conditions Table:
A live dashboard showing all trade condition checks (Trend, Recent Price Move, Candlestick confirmations) in real-time with visual feedback.
📊 Backtesting & Stats:
Auto-calculates average win, average loss, risk-reward ratio (RRR), and win rate across historical signals.
Clean performance dashboard with color-coded metrics for easy reading.
🔔 Alerts:
Set alerts for trade signals or significant price movements to stay updated without monitoring the chart 24/7.
Visuals:
Trend markers and price movement flags plotted directly on the chart.
Dual tables:
📈 Conditions table (top-right): breaks down trade criteria status.
📊 Performance table (bottom-right): shows real-time stats on win/loss and RRR.🔊 The Echo System – Trend + Momentum Trading Strategy
Overview:
The Echo System is a trend-following and momentum-based trading tool designed to identify high-probability buy and sell signals through a combination of market trend analysis, price movement strength, and candlestick validation.
Key Features:
📈 Trend Detection:
Uses a 30 EMA vs. 200 EMA crossover to confirm bullish or bearish trends.
Visual trend strength meter powered by percentile ranking of EMA distance.
🔄 Momentum Check:
Detects significant price moves over the past 6 bars, enhanced by ATR-based scaling to filter weak signals.
🕯️ Candle Confirmation:
Validates recent price action using the previous and current candle body direction.
✅ Smart Conditions Table:
A live dashboard showing all trade condition checks (Trend, Recent Price Move, Candlestick confirmations) in real-time with visual feedback.
📊 Backtesting & Stats:
Auto-calculates average win, average loss, risk-reward ratio (RRR), and win rate across historical signals.
Clean performance dashboard with color-coded metrics for easy reading.
🔔 Alerts:
Set alerts for trade signals or significant price movements to stay updated without monitoring the chart 24/7.
Visuals:
Trend markers and price movement flags plotted directly on the chart.
Dual tables:
📈 Conditions table (top-right): breaks down trade criteria status.
📊 Performance table (bottom-right): shows real-time stats on win/loss and RRR.
Cutrim TheoryCutrim Theory
Created by Dalpiaz-BR , this indicator is based on the Probabilistic Theory developed by the renowned Brazilian trader Ronal Cutrim. The indicator aims to provide a detailed analysis of market imbalances and candlestick patterns across different timeframes, utilizing multi-timeframe data and dynamic information tables. It is designed to help traders identify favorable market conditions and make informed decisions in their trades.
Indicator Description
The Cutrim Theory is an advanced indicator that combines candlestick pattern analysis, and market imbalances to give a clear view of market conditions. The tool uses multi-timeframe data and displays dynamic tables to facilitate visual analysis on the main chart and histogram.
Key Features:
Multi-Timeframe Imbalance Analysis:
The indicator calculates buy and sell imbalances based on the number of green and red candles in different timeframes.
Users can choose to display all imbalances, only the last imbalance, or turn off this feature.
Dynamic and Flexible Tables:
Main Table: Shows detailed data for different timeframes, such as the percentage of bullish and bearish candles, the size of the last candle, and the average candle size.
Dynamic Table Position: The table on the main chart can be set to automatically move based on the current price position (upper or lower). Users can also manually set the position.
Histogram Table: Displays a summary of key information in an additional table on the histogram.
Visualization of Averages and Candle Sizes:
Displays histograms and moving average lines for candle sizes, providing a clear visualization of current market volatility.
Imbalance Signals:
The indicator also adds "Buy" and "Sell" labels directly on the main chart when an imbalance is detected, helping traders spot trading opportunities.
Customizable Settings:
Imbalance Options: "Turn Off All," "Last Imbalance," or "All Imbalances."
Main Table Positions: "top_left," "top_right," "bottom_left," "bottom_right," or "Dynamic."
Signal Messages: Customize the "Buy" and "Sell" messages.
Benefits:
Provides a clear and intuitive view of market conditions across multiple timeframes.
Facilitates the detection of imbalances and market shifts.
Highly configurable to meet the needs of different types of traders.
This script is a powerful addition to any trader's toolbox who seeks a detailed and multi-timeframe analysis based on Ronal Cutrim's Probabilistic Theory. Enjoy and adjust according to your trading style!
Auto Harmonic Pattern - PRO [AlgoScopes] V1Harmonic Patterns is a powerful tool for identifying potential reversal areas in the financial markets. Auto Harmonic Pattern Pro it is based on the work of Scott Carney, a renowned trader and author who developed the concept of harmonic patterns.
Scott Carney's extensive research and contributions have greatly enhanced our understanding of market patterns and their application in trading. Auto Harmonic Pattern Pro is adapted from Scott Carney's original work on harmonic patterns, as well as other sources that have contributed to the recognition and understanding of harmonic patterns beyond Carney's initial research.
Auto Harmonic Pattern Pro offers traders a valuable tool for identifying potential reversal zones in the markets. We would like to express our gratitude to Scott Carney for his pioneering work in developing harmonic patterns, as well as to the various contributors and sources that have expanded our knowledge and understanding of harmonic patterns beyond Carney's original research.
Remember to always practice proper risk management and combine the indicator's signals with other technical analysis tools for a comprehensive trading approach.
For more information about Scott Carney and his work on harmonic patterns, you can find additional resources on his official website.
💠 ABOUT THE SCRIPT
💎 DISPLAY
⚬ The following things are displayed by default on the chart
🔸 Live patterns in trade with XABCD labels. (filled major triangle)
🔸 Entry, Stop and Target levels on chart for all live patterns. Target level are dimmed along with reducing size when they become irrelevant
🔸 Open Trades Stat table - Show patterns ID, patterns name, status for patterns, size&age, Entry, I.Stop, T.Stop and Targets (TP1 - TP4).
⚬ Highlighted present stop (and/or trailing stop if is enabled) and next target
⚬ When there are multiple patterns on chart, Entry, Stop, and Target labels & lines & PRZ* boxes are created with specific distance from each other to provide clarity to the users
*(potential reversal zone)
⬜ SETTINGS
⚬ Let's talk about some of the settings. Almost all of these settings have already been optimized and tested over time, but for some tickers it might be better to do a new test.
💎 ZIGZAG
🔸 Length - Default is set to 8. User can change settings but it is a good idea to keep with fibonacci (5, 13, 21, 34, 55 etc)
🔸 Depth - This setting is for how many pivots indicator scan to find harmonic pattern. By default it is set as 200
🔸 Recursive Algorithm - Enabled will use recursive instead standard zigzag
💎 HARMONIC PATTERN SETTINGS
🔸 Trade Direction - Default is set to show all (bearish and bullish) harmonic patterns. Can be filtered to bullish or bearish direction.
🔸 Error Percent - Default is 8. That is error percent tolerance from perfect pattern ratio.
🔸 Maximum patterns - Maximum patterns allowed on chart at any time
⚬ When it reaches the maximum patterns and the indicator finds a new one, the old patterns will be removed
- (important for algo traders because alerts for those removed patterns will no longer be a trigger)
🔸 Pattern size
⚬ Without filter will show all patterns (regardless of size)
⚬ Show only patterns for user preference size (no more two patterns because is smaller of 280 bars)
🔸 External Filter - It can be used to filter harmonic patterns. You can build your own custom trend based scripts and use it with AHP to filter trades.
⚬ The structure of the external script must be
1 for Long/Bullish patterns
-1 for Short/Bearish patterns
2 for all (Long and Short patterns)
0 Trade is not allowed
🔸 Filter Pattern Starts
⚬ When Filter starts is enabled pattern will start for logical pivot (see example)
⚬ Disabled filter will show more patterns (still can be very profitable)
💎 STOP & ENTRY & TRAILING STOP
🔸 Trail Entry Price - If Entry is still not reached and the price is still in PRZ zone, at the new high/low will adjust Entry.
⚬ Open Stats table will show the first Entry (when patterns were found) as well as the last corrected Entry (when patterns reached Entry level).
⚬ Disable this option Entry will remain at the level when patterns are found.
🔸 Enable Targets (awaiting entry) - enabled will show potential Targets for "awaiting entry" patterns (not active patterns because they have not yet reached Entry).
⚬ The Open stats table will show all other information, risk %, R:R etc).
⚬ Risky trade but with very good R:R (not recommended for inexperienced traders, very high risk of trading hitting Stop before reaching a Target)
🔸 Stop Distance - By default is set to 5. That is percent from the last low/high when the pattern reaches Entry. Stop trail from price till pattern reached Entry level.
🔸 Entry Distance - By default is set to 16. Same for SL that is percent distance from live price. You can increase/decrease percent but remember you have to give space between live price and the entry.
⚬ If entry is close to price, trade will become active too quickly
⚬ Remember if you change Stop Distance as well as Entry Distance to check Risk : Reward (recommended R:R for the first target is about 1:1)
🔸 Trailing Type - Options for trailing type, Continuous, Stepped, Breakeven and Disabled.
⚬ Continuous - When the price reaches "Trailing Active" (initial level for activating the trailing stop), T.Stop will start from Entry or Initial Stop (based on "Trailing Starts") and follow the price by Distance or Percent (based on "Trailing by").
- example one (trailing starts from Initial Stop when TP1 reached by distance/price on picture 1 and by percent on picture 2)
- example two (trailing starts from Entry when TP1 reached by distance/price on picture 1 and by percent on picture 2)
⚬ Stepped - when price reaches Trailing Active (initial level for activating the trailing stop), T.Stop will move to the previous level
- (If "Trailing Active" is set to Target2, then T.Stop will move to Target1 when price reached TP2)
⚬ Breakeven - when price reaches Trailing Active (initial level for activating the trailing stop), T.Stop will move to Entry and stay there the entire time for that harmonic trade
- (till reached all targets or reached T.Stop)
🔸 Trailing Active - When will the Trailing Stop be activated ("Trailing Type" must be enabled)
🔸 Trailing by - Distance or Percent
⚬ Distance - T.Stop will follow live price by initial distance
⚬ Percent - T.Stop will follow live price by initial percent
🔸 Trailing Starts - Entry or Initial Stop
⚬ Entry - T.Stop will start trailing from Entry level
⚬ I.Stop - T.Stop will start trailing from initial Stop level
- (Check Continuous picture for information)
💎 TARGET
🔸 Base - The level from which the calculation for Targets is made.
🔸 Target 1/Target 4 dropdown - Targets are set by default and set in the dropdown most often used for those targets.
🔸 Target 1/Target 4 custom - If the desired ratio is not in the dropdown, then it is possible to manually enter the desired ratio.
⚬ (If you want to change some of the targets, maybe to confluence with support/resistance)
💎 PATTERNS
🔸 Harmonic Patterns Type
⚬ Enable/Disable harmonic patterns by Type of patterns (for Classic and Anti patterns)
⚬ By default all patterns are enabled (for standard patterns). Users can control and select/deselect all Classic, Anti or Non Standard patterns but also disable individual patterns.
⚬ For some patterns (like Shark and Navarro 200) we change PRZ or place in different Type groups. That is just cosmetic things.
🔸 Classic - This includes all and most popular Harmonic Patterns.
⚬ Gartley (Type I)
⚬ Bat (Type I)
⚬ Butterfly (Type II)
⚬ Crab (Type II)
⚬ Deep Crab (Type II)
⚬ Cypher (Type II)
⚬ Shark (Type III)
⚬ Nenstar (Type IV)
🔸 Anti Patterns
⚬ Anti Nenstar (Type I)
⚬ Anti Shark (Type II)
⚬ Anti Cypher (Type II)
⚬ Anti Crab (Type II)
⚬ Anti Butterfly (Type III)
⚬ Anti Bat (Type IV)
⚬ Anti Gartley (Type IV)
⚬ Navarro 200 (Type IV)
🔸 Non Standard -
⚬ White Swan
⚬ Black Swan
⚬ 3 Drive
⚬ Anti 3 Drive
⚬ Wolfe
⚬ Snorm
⚬ 121 Pattern
⚬ 5-0 Pattern
⚬ Sea Pony
⚬ Leonardo
💎 PATTERN DISPLAY OPTION
🔸 Pattern Lines Size - thickness for harmonic patterns
🔸 Pattern Lines Type - type for harmonic pattern lines (solid, dotted, dashed)
🔸 Fill XAB/BCD - major harmonic triangle
🔸 Fill ABC/XBD - minor harmonic triangle
🔸 Enable XABCD Label - labels for harmonic pattern
🔸 XABCD Label Size - size for harmonic xabcd labels
🔸 Enable Ratio Label & Line - lines and labels that connect harmonic patterns levels and that show the patterns ratio
🔸 Ratio Label Size - ratio labels size
⚬ Lines for pattern ratio are set by default dashed and can’t be changed.
💎 PRZ & ENTRY | STOP | TARGET SETTINGS
🔸 Entry & Stop & Target Labels - by default is set to small (opt small & normal)
🔸 Entry & Stop & Target Lines - by default is set to show lines & labels & price (opt lines & labels & price or lines & labels or disable all)
🔸 PRZ Box size - size in bars for PRZ box
⚬ Added option when it is not readable on chart pattern names or entry/stop/targets offset
⚬ Maximum (last pattern) can be drawn up to 500 bars in future or you will get error for script (use this option only when you need)
🔸 PRZ Box Type of Spacing - distance between PRZ boxes. "Auto" will make the maximum distance when there are more than 3 patterns on the chart for better visibility
- (the maximum can be projected up to 500 bars in the future)
🔸 PRZ Box Manual Spacing - manual distance between PRZ boxes if is “PRZ Box Type of Spacing” set to manual
💎 STATS AND DISPLAY
⚬ These settings can be used to manage display of open and close statistic tables
🔸 Open Trades - By default is enabled and set to the top right position.
🔸 Closed Trades - By default is disabled and set to bottom left position.
⚬ The size of the table can be changed (by default it is set to small)
🔸 Enable Tool Tip for Table - can be enabled/disabled. Shows important information for each section related to Open or Closed tables.
⚬ Recommended enabled until everything related to tables is understood, and later disabled (it starts to get annoying when you accidentally cross the tables with the mouse and tooltip box pop up)
💎 OPEN STATS
🔸 Percentage - show percentage for Targets and Stops
🔸 Risk/Reward - show patterns risk to reward for each Targets
🔸 Size/Age - show patterns size (from X to D in bars) and patterns age (distance in bars when patterns “In Trade”)
🔸 Live % & R:R - enabled will show live % and R:R if you take trade in that moment
💎 CLOSED STATS
🔸 Percentage - show stats by percent instead of numbers
🔸 Display Mode - Closed trade table have three display option, Compact, Detailed and Selective
⚬ Compact - show stats for Long/Bullish and Short/Bearish patterns
⚬ Selective - show stats just for active patterns
⚬ Detailed - show stats for each enabled patterns
- All stats is for “Backtest Bars” if enabled.
- I removed some things from the previous indicator (R:R as well as trailing R:R and win rate) because I think they are not relevant in Closed Table for trade or for statistics (Open Table have that)
💎 PATTERN | CHART COLOR THEME
⚬ By default it is set to Light color theme. Color theme will affect pattern lines, XABCD labels, ratio lines and label, entry/sl/targets labels and text in the open statistics table.
🔸 Dark Theme / Light Theme - Users can change any default individual color for dark or light theme (transparency too).
⚬ Light/Dark Theme suits dark or light chart background or user can change all color to preferred trade style.
⚬ Users have extra control to change all color to preferred trade style.
💎 ALERTS
⚬ Alerts - These settings help users to choose the type of alerts they want to receive.
🔸 New - New Harmonic Pattern is identified
🔸 Entry - Harmonic Pattern reached Entry level
🔸 Target 1/Target4 - Alert when patterns reached on of Target levels
🔸 Closure - Harmonic Pattern trade is closed. Reached all Targets or Stop or Trailing Stop (if is enabled)
🔸 Long & Short placeholders - Enabled will change for alerts Bullish/Bearish text for Long/Short text
⚬ example of custom alerts with some placeholders
💎 BACKTEST WINDOW
🔸 Backtest bars - Enabled will scan patterns for that bar range (default is set to 5000)
🔷 TOOL TIP
⚬ In setting you have help from tooltip to give you almost all this information for easy understanding. Hover mouse above tool tip and windows with info will appear.
⚬ On the chart, tool tip is added for each individual Harmonic pattern to show extra information (pattern ratio, type of harmonic and where often that pattern appears in Elliott wave fractal)
⚬ Tooltip for tables will also provide all the information related to Open and Closed tables. Disabled tooltip for tables will hide all information, but the tooltip for patterns will still remain.
🔴 Possible Errors
⚬ If a mistake is made in the settings and, for example, TP2 is set to 0.618 ratio and TP3 is changed to 0.5 ratio
- (the larger target is set to a smaller ratio than the smaller target), a red text will appear over most charts to indicate the error.
⚬ If Trailing Type is enabled and "Trailing Active" and "Trailing Starts" are set to the same level (Entry), a red text will appear on the charts to indicate an error
- (change "Trailing Active" to a higher level, TP1, or lower "Trailing Starts " to "I.Start")
AI x Meme Impulse Tracker [QuantraSystems]AI x Meme Impulse Tracker
Quantra Systems guarantees that the information created and published within this document and on the Tradingview platform is fully compliant with applicable regulations, does not constitute investment advice, and is not exclusively intended for qualified investors.
Important Note!
The system equity curve presented here has been generated as part of the process of testing and verifying the methodology behind this script.
Crucially, it was developed after the system was conceptualized, designed, and created, which helps to mitigate the risk of overfitting to historical data. In other words, the system was built for robustness, not for simply optimizing past performance.
This ensures that the system is less likely to degrade in performance over time, compared to hyper-optimized systems that are tailored to past data. No tweaks or optimizations were made to this system post-backtest.
Even More Important Note!!
The nature of markets is that they change quickly and unpredictably. Past performance does not guarantee future results - this is a fundamental rule in trading and investing.
While this system is designed with broad, flexible conditions to adapt quickly to a range of market environments, it is essential to understand that no assumptions should be made about future returns based on historical data. Markets are inherently uncertain, and this system - like all trading systems - cannot predict future outcomes.
Introduction
The AI x Meme Impulse Tracker is a cutting-edge, fast-acting rotational algorithm designed to capitalize on the strength of assets within pre-selected categories. Using a custom function built on top of the RSI Pulsar, the system measures momentum through impulses rather than traditional trend following methods. This allows for swifter reallocations based on short bursts of strength.
This system focuses on precision and agility - making it highly adaptable in volatile markets. The strategy is built around three independent asset categories - with allocations only made to the strongest asset in each - ensuring that capital movement (in particular between blockchains) is kept to a minimum for efficiency purposes while maintaining exposure to the highest performing tokens.
Legend
Token Inputs:
The Impulse Tracker is designed with dynamic asset selection - allowing traders to customize the inputs for each category. This feature enables flexible system management, as the number of active tokens within each category can be adjusted at any time. Whether the user chooses the default of 13 tokens per category, or fewer, the system will automatically recalibrate. This ensures that all calculations, from relative strength to individual performance assessments, adjust as required. Disabled tokens are treated by the system as if they don’t exist - seamlessly updating performance metrics and the Impulse Tracker’s allocation behavior to maintain the highest level of efficiency and accuracy.
System Equity Curve:
The Impulse Tracker plots both the rotational system’s equity and the Buy-and-Hold (or ‘HODL’) benchmark of Bitcoin for comparison. While the HODL approach allocates the entire portfolio to Bitcoin and functions as an index to compare to, the Impulse Tracker dynamically allocates based on strength impulses within the chosen tokens and categories. The system equity curve is representative of adding an equal capital split between the strongest assets of each category. The relative strength system does handle ‘ties’ of strength - in this situation multiple tokens from a single category can be included in the final equity curve, with the allocated weight to that category split between the tied assets.
TABLES:
Equity Stats:
This table is held in Quantra System's typical UI design language. It offers a comprehensive snapshot of the system’s performance, with key metrics organized to help traders quickly assess both short-term and cumulative results. The left side provides details on individual asset performance, while the right side presents a comparison of the system’s risk-adjusted metrics against a simple BTC Hodl strategy.
The leftmost column of the Equity Stats table showcases performance indicators for the system’s current allocations. This provides quick identification of the current strongest tokens, based on confirmed and non-repainting data as soon as the current opens and the last bar closes.
The right-hand side compares the performance differences between the system and Hodl profits, both on a cumulative basis and analyzing only the previous bar. The total number of position changes is also tracked in this table - an important metric when calculating total slippage and should be used to determine how ‘hands-on’ the strategy will be on the current timeframe.
The lower part of the table highlights a direct comparison of the AI x Memes Impulse strategy with buy-and-hold Bitcoin. The risk adjusted performance ratios, Sharpe, Sortino and Omega, are shown side by side, as well as the maximum drawdown experienced by both strategies within the set testing window.
Screener Table:
This table provides a detailed breakdown of the performance for each asset that has been the strongest in its category at some point and thus received an allocation. The table tracks several key metrics for each asset - including returns, volatility, Sharpe ratio, Sortino ratio, Omega ratio, and maximum drawdown. It also displays the signals for both current and previous periods, as well as the assets weight in the theoretical portfolio. Assets that have never received a signal are also included, giving traders an overview of which assets have contributed to the portfolio's performance and which have not played a role so far.
The position changes cell also offers important insights, as it shows the frequency of not just total position changes, but also rebalancing events.
Detailed Slippage Table:
The Detailed Slippage Table provides a comprehensive breakdown of the calculated slippage and fees incurred throughout the strategy’s operations. It contains several key metrics that give traders a granular view of the costs associated with executing the system:
Selected Slippage - Displays the current slippage rate, as defined in the input menu.
Removal Slippage - This accounts for any slippage or fees incurred when removing an allocation from a token.
Reallocation Slippage - Tracks the slippage or fees when reallocating capital to existing positions.
Addition Slippage - Measures the slippage or fees incurred when allocating capital to new tokens.
Final Slippage - Is the sum of all the individual slippage points and provides a quick view of the total slippage accounted for by the system.
The table is also divided into two columns:
Last Transaction Slippage + Fees - Displays any slippage or fees incurred based on position changes within the current bar.
Total Slippage + Fees - Shows the cumulative slippage and fees incurred since the portfolio’s selected start date.
Visual Customization:
Several customizable features are included within the input menu to enhance user experience. These include custom color palettes, both preloaded and user-selectable. This allows traders to personalize the visual appearance of the tables, ensuring clarity and consistency with their preferred interface themes and background coloring.
Additionally, users can adjust both the position and sizes of all the tables - enabling complete tailoring to the trader’s layout and specific viewing preferences and screen configurations. This level of customization ensures a more intuitive and flexible interaction with the system’s data.
Core Features and Methodologies
Advanced Risk Management - A Unique Filtering Approach:
The Equity Curve Activation Filter introduces an innovative way to dynamically manage capital allocation, aligning with periods of market trend strength. This filter is rooted in the understanding that markets move cyclically - altering between periods trending and mean-reverting periods. This cycle is especially pronounced in the crypto markets, where strong uptrends are often followed by prolonged periods of sideways movements or corrections as participants take profits and momentum fades.
The Cyclical Nature of Markets and Trend Following:
Financial markets do not trend indefinitely. Each uptrend or downtrend, whether over high and low timeframes, tends to culminate in a phase where momentum exhausts - leading to the sideways or corrective phases. This cycle results from the natural dynamics of market participants: during extended trends, more participants jump in, riding the momentum until profit taking causes the trend to slow down or reverse. This cyclical behavior occurs across all timeframes and in all markets - making it essential to adapt trading strategies in attempt to minimize losses during less favorable conditions.
In a trend following system, profitability often mirrors this cyclical pattern. Trend following strategies thrive when markets are moving directionally, capturing gains as price moves with strength in a single direction. However in phases where the market chops sideways, trend following strategies will usually experience drawdowns and reduced returns due to the impersistent nature of any trends. This fluctuation in trend following profitability can actually serve as one of the best coincident indicators of broader market regime change - when profitability begins to fade, it often signals a transition to drawn out unfavorable trend trading conditions.
The Equity Curve as a Market Signal
Within the Impulse Tracker, a continuous equity curve is calculated based upon the system's allocation to the strongest tokens. This equity curve effectively tracks the system’s performance under all market conditions. However, instead of solely relying on the direct performance of the selected tokens, the system applies additional filters to analyze the trend strength of this equity curve itself.
In the same way you only want to purchase an asset that is moving up in price, you only want to allocate capital to a strategy whose equity curve is trending upwards!
The Equity Curve Activation Filter consistently monitors the trend of this equity curve through various filter indicators, such as the “Wave Pendulum Trend”, the “Quasar QSM” and the “MAQSM” (an aggregate of multiple types of averages). These filters help determine whether the equity curve is trending upwards, signaling a favorable period for trend following. When the equity curve is in a positive trend, capital is allocated to the system as normal - allowing it to capture gains during favorable market conditions, Conversely, when the trend weakens and the equity curves begins to stagnate or decline, the activation filter shifts the system into a “cash” positions - temporarily halting allocations in order to prevent market exposure during choppy or mean reverting phases.
Timing Allocation With Market Conditions
This unique filtering approach ensures that the system is primarily active during periods when market trends are most supportive. By aligning capital allocations with the uptrend in trend following profitability, the system is designed to enter during periods of strong momentum and move to cash when momentum with the equity curve wanes. This approach reduces the risk of overtrading in less favorable conditions and preserves capital for the next favorable trend.
In essence the Equity Curve Allocation Filter serves as a dynamic risk management layer that leverages the cyclicality of trend following profitability in order to navigate shifting market phases.
Sensitivity and Signal Responsiveness:
The Quasar Sensitivity Setting allows users to fine-tune the system’s responsiveness to asset signals. High sensitivity settings lead to quicker position changes, making the system highly reactive to short term strength impulses. This is especially useful in fast moving markets where token strength can shift rapidly. The Sensitive setting might be more applicable to higher volatility or lower market cap assets - as the increased volatility increases the necessity of faster position cutting in order to front run the crowd. Of course - a balanced approach is ideal, as if the signals are too fast there will be too many whips and false signals. (And extra fees + slippage!)
The benefit of this script is because of the advanced slippage calculations, false signals are sufficiently punished (unlike systems without fees or slippage) - so it will become immediately apparent if the false signals have a significantly detrimental impact on the system’s equity curve.
Asset specific signals within each category are re-evaluated after the close of each bar to ensure that capital is always allocated to the highest performing asset. If a token’s momentum begins to fade the system swiftly reallocates to the next strongest asset within that category.
Category Filter - Allocates only to the Strongest Asset per group
One of the core innovations of the AI x Meme Impulse Tracker is the customizable Category Filter, which ensures that only the strongest-performing asset within each predefined group receives capital allocation. This approach not only increases the precision of asset selection but also allows traders to tailor the system to specific token narratives or categories. Sectors can include trending themes such as high-attention meme tokens, AI-driven tokens, or even categorize assets by blockchain ecosystems like Ethereum, Solana, or Base chain. This flexibility enables users to align their strategies with the latest market narratives or to optimize for specific groups, focusing on high-beta tokens within well defined sectors for a more targeted exposure. By keeping the focus on category leaders, the system avoids diluting its impact across underperforming assets, thereby maximizing capital efficiency and reducing unnecessary trading costs.
Dynamic Asset Reallocation:
Dynamic reallocation ensures that the system remains nimble and adapts to changing market conditions. Unlike slower systems, the Quasar method continually monitors for changes in asset strength and reallocates capital accordingly - ensuring that the system is always positioned in the highest performing assets within each category.
Position Changes and Slippage:
The Impulse Tracker places a strong emphasis on realistic simulation, prioritizing accuracy over inflated backtest results. This approach ensures that slippage is accounted for in a more aggressive manner than what may be experienced in real-world execution.
Each position change within the system - whether it’s buying, selling, reallocating, or rebalancing between assets - incurs slippage. Slippage is applied to both ends of every transaction: when a position is entered and exited, and when reallocating capital from one token to another. This dynamic behavior is further enhanced by a customizable slippage/fees input, allowing users to simulate realistic transaction costs based on their own market conditions and execution behaviors.
The slippage model works by applying a weighted slippage to the equity curve, taking into account the actual amount of capital being moved. Slippage is not applied in a blanket manner but rather in proportion to the allocation changes. For example, if the system reallocates from a single 100% position to two 50% allocations, slippage will be applied to the 50% removed from the first asset and the 50% added to the new asset, resulting in a 1x slippage multiplier.
This process becomes more granular when multiple assets are involved. For instance, if reallocating from two 50% positions to three 33% positions, slippage will be incurred on each of the changes, but at a reduced rate (⅔ x slippage), reflecting the smaller percentage of portfolio equity being moved. The slippage model accounts for all types of allocation shifts, whether increasing or decreasing the number of tokens held, providing a realistic assessment of system costs.
Here are some detailed examples to illustrate how slippage is calculated based on different scenarios:
100% → 50% / 50%: 1x slippage applied to both position changes (2 allocation changes).
50% / 50% → 33% / 33% / 33%: ⅔ x slippage multiplier applied across 3 allocation changes.
33% / 33% / 33% → 100%: 4/3 x slippage multiplier applied across 3 allocation changes.
In practice, not every position change will be rebalanced perfectly, leading to a lower number of transactions and lower costs in practice. Additionally, with the use of limit orders, a trader can easily reduce the costs of entering a position, as well as ensuring a competitive entry price.
By simulating slippage in this granular manner, the system captures the absolute maximum level of fees and slippage, in order to ensure that backtest results lean towards an underrepresentation - opposed to inflated results compared with practical execution.
A Special Note on Slippage
In the image above, the system has been applied to four different timeframes - 20h, 15h, 10h, and 5h - using identical settings and a selected slippage amount of 2%. By isolating a recent trend leg, we can illustrate an important concept: while the 15h timeframe is more profitable than the 20h timeframe, this difference stems from a core trading principle. Lower timeframes typically provide more data points and allow for quicker entries and exits in a robust system. This often results in reduced downside and compounding of gains.
However, slippage, fees, and execution constraints are limiting factors, especially in volatile, low-cap cryptocurrencies. Although lower timeframes can improve performance by increasing trade frequency, each trade incurs heavy slippage costs that accumulate - impacting the portfolio’s capital at a compounding rate. In this example, the chosen slippage rate of 2% per trade is designed to reflect the realistic trading costs, emphasizing how lower timeframe trading comes at the cost of increased slippage and fees
Finding the optimal balance between timeframe and slippage impact requires careful consideration of factors such as portfolio size, liquidity of selected tokens, execution speed, and the fee rate of the exchange you execute trades on.
Equity Curve and Performance Calculations
To provide a benchmark, the script also generates a Buy-and-Hold (or "HODL") equity curve that represents a complete allocation to Bitcoin. This allows users to easily compare the performance of the dynamic rotation system with that more traditional benchmark strategy.
The script tracks key performance metrics for both the dynamic portfolio and the HODL strategy, including:
Sharpe Ratio
The Sharpe Ratio is a key metric that evaluates a portfolio’s risk-adjusted return by comparing its ‘excess’ return to its volatility. Traditionally, the Sharpe Ratio measures returns relative to a risk-free rate. However, in our system’s calculation, we omit the risk-free rate and instead measure returns above a benchmark of 0%. This adjustment provides a more universal comparison, especially in the context of highly volatile assets like cryptocurrencies, where a traditional risk-free benchmark, such as the usual 3-month T-bills, is often irrelevant or too distant from the realities of the crypto market.
By using 0% as the baseline, we focus purely on the strategy's ability to generate raw returns in the face of market risk, which makes it easier to compare performance across different strategies or asset classes. In an environment like cryptocurrency, where volatility can be extreme, the importance of relative return against a highly volatile backdrop outweighs comparisons to a risk-free rate that bears little resemblance to the risk profile of digital assets.
Sortino Ratio
The Sortino Ratio improves upon the Sharpe Ratio by specifically targeting downside risk and leaves the upside potential untouched. In contrast to the Sharpe Ratio (which penalizes both upside and downside volatility), the Sortino Ratio focuses only on negative return deviations. This makes it a more suitable metric for evaluating strategies like the AI x Meme Impulse Tracker - that aim to minimize drawdowns without restricting upside capture. By measuring returns relative to a 0% baseline, the Sortino ratio provides a clearer assessment of how well the system generates gains while avoiding substantial losses in highly volatile markets like crypto.
Omega Ratio
The Omega Ratio is calculated as the ratio of gains to losses across all return thresholds, providing a more complete view of how the system balances upside and downside risk even compared to the Sortino Ratio. While it achieves a similar outcome to the Sortino Ratio by emphasizing the system's ability to capture gains while limiting losses, it is technically a mathematically superior method. However, we include both the Omega and Sortino ratios in our metric table, as the Sortino Ratio remains more widely recognized and commonly understood by traders and investors of all levels.
Usage Summary:
While the backtests in this description are generated as if a trader held a portfolio of just the strongest tokens, this was mainly designed as a method of logical verification and not a recommended investment strategy. In practice, this system can be used in multiple ways.
It can be used as above, or as a factor in forming part of a broader asset selection system, or even a method of filtering tokens by strength in order to inform a day trader which tokens might be optimal to look for long-only trading setups on an intrabar timeframe.
Final Summary:
The AI x Meme Impulse Tracker is a powerful algorithm that leverages a unique strength and impulse based approach to asset allocation within high beta token categories. Built with a robust risk management framework, the system’s Equity Curve Activation Filter dynamically manages capital exposure based on the cyclical nature of market trends, minimizing exposure during weaker phases.
With highly customizable settings, the Impulse Tracker enables precise capital allocation to only the strongest assets, informed by real-time metrics and rigorous slippage modeling in order to provide the best view of historical profitability. This adaptable design, coupled with advanced performance analytics, makes it a versatile tool for traders seeking an edge in fast moving and volatile crypto markets.
TICK+ [Pt]█ TICK+ – Advanced US Market Internals & TICK Distribution Tool
TICK+ is a comprehensive indicator that decodes US market internals by leveraging the TICK index—the net difference between stocks ticking up and those ticking down. Unlike many standard TICK tools that only plot raw values, TICK+ provides multiple visualization modes, dynamic moving averages, an independent MA Ribbon, a detailed distribution profile, divergence and pivot analysis, and real-time data tables. This integrated approach offers both visual and quantitative insights into intraday market breadth, trend sustainability, and potential reversals—making it an indispensable tool for trading US indices, futures, and blue‑chip stocks.
Market internals enthusiasts often consider the TICK index indispensable for trading these markets. By offering an immediate snapshot of sentiment and confirming trends through additional analytics, TICK+ gives traders a decisive edge—helping to determine whether a rally is truly supported by broad participation or if caution is warranted.
--------------------------------------------------------------------------------------------------------
█ Key Features:
► Market Internal – Multiple Display Modes:
Line Mode: Plots the TICK index as a continuous line for a clear view of real‑time values and trend direction.
Bar Mode: Uses traditional bar charts to represent the TICK index, emphasizing the magnitude of changes.
Heikin Ashi Mode: Applies the Heikin Ashi technique to smooth out fluctuations, making the underlying trend easier to discern.
Iceberg TICK Mode: Fills the area between zero and the highs in green, and between zero and the lows in red—highlighting how long the market remains in positive versus negative territory.
How It Works & Usage:
These display modes enable traders to select the visualization that best fits their analysis style. For instance, Iceberg TICK Mode highlights the duration of market strength or weakness, a critical factor for intraday directional assessment.
Comparison of Display Modes
► Dual Moving Average – Fast & Slow:
Computes two moving averages on the TICK index:
• Fast MA – reacts quickly to recent changes.
• Slow MA – confirms the overall trend.
Crossovers provide clear signals:
• Fast MA crossing above the slow MA indicates rising bullish momentum.
• Fast MA crossing below the slow MA indicates increasing bearish pressure.
How It Works & Usage:
These dual moving averages assist in detecting momentum shifts. Crossover signals can be used to time entries and exits to align with prevailing market sentiment.
Dual MA Crossover Example
► Moving Average / Smoothed MA – Smoothed & Base Moving Averages:
Calculates a Base MA and a Smoothed MA on the TICK index to reduce short‑term volatility.
Helps clarify the prevailing trend, providing additional confirmation alongside the dual moving averages.
How It Works & Usage:
These averages filter out noise and offer extra validation of the current trend, enhancing the reliability of trading signals.
Base and Smoothed MA Example
► Moving Average Ribbon – MA Ribbon:
Independently plots several moving averages together as a “ribbon,” each line customizable in length and type.
Visually reflects overall market directional strength:
• Consistent green color indicate sustained bullish conditions.
• Uniform red color indicate prevailing bearish sentiment.
How It Works & Usage:
The MA Ribbon provides a layered perspective on market internals. It enables traders to quickly gauge the robustness of a trend or identify early signs of a potential reversal.
MA Ribbon Trend and Shading
► Divergence - Pivot based – Divergence & Pivot Analysis:
Integrates divergence detection with pivot-based trendline analysis.
Identifies instances when the TICK index and price action diverge, serving as an early warning of a weakening trend.
How It Works & Usage:
Divergence signals help refine trade entries and exits by indicating potential trend reversals or adjustments in market sentiment.
Divergence Analysis
► TICK Distribution Profile – TICK Distribution Profile:
Divides the TICK index range into multiple bins to create a profile of how TICK values are distributed.
Identifies the point of control—the level where most TICK readings concentrate—relative to zero.
Allows adjustment of the lookback period to detect shifts in market bias, such as a move from a neutral zone toward extreme levels.
How It Works & Usage:
By visualizing the distribution of TICK readings, traders can monitor changes in market internals that may precede significant trend changes.
TICK Distribution Profile
► ZigZag – ZigZag:
Applies a zigzag algorithm to filter out minor fluctuations and identify significant swing highs and lows.
Highlights trend extremities and potential reversal points.
Offers an optional extension to the last bar for dynamic trend tracking.
How It Works & Usage:
The ZigZag feature helps traders focus on the major price swings that define market structure, eliminating the noise of insignificant movements.
ZigZag Example
► Pivot Trendline – Pivot Trendline:
Draws trendlines connecting pivot highs and pivot lows.
Provides settings to display only the most recent trendline or extend the last trendline.
Assists in identifying evolving support and resistance levels.
How It Works & Usage:
Pivot trendlines offer clear visual cues for key price levels and potential reversal zones, aiding in the timing of trades.
Pivot Trendline Example
► TICK Levels – TICK Levels:
Defines key thresholds for the TICK index, including neutral levels, trend zones, and overbought/oversold (OB/OS) extremes.
Highlights these levels to assist in identifying conditions that may trigger caution or present opportunities.
How It Works & Usage:
Marking these levels provides an immediate reference for assessing when the TICK index enters critical zones, guiding risk management and trade planning.
TICK Levels
► Background Color – Background Color:
Optionally changes the chart background based on TICK or moving average thresholds.
Provides additional visual cues regarding shifts in market sentiment.
How It Works & Usage:
Background color changes help reinforce key signals by immediately indicating shifts in market internals, enhancing overall situational awareness.
Background Color Example
► Data Tables – Data Table:
Displays essential market data in a single, easy-to-read table, including the TICK index source, market sentiment (e.g. Bullish, Bearish, or Neutral), trend status (such as Accelerating ⇗ or Retracing ⇘), and the current TICK value with color-coded strength.
Consolidates numerical data for a quick and precise assessment of market internals.
How It Works & Usage:
The data tables provide live, numerical feedback that complements the visual analysis, making it easy to monitor market sentiment and trend changes at a glance.
Data Table Display with Metrics
--------------------------------------------------------------------------------------------------------
█ Customization & Input Flexibility:
TICK+ offers extensive input options organized into feature‑specific groups, enabling traders to tailor the tool to various strategies:
► Market Internals Group:
Selects the primary TICK index source (with an optional custom override).
Provides a choice of display modes (Line, Bar, Heikin Ashi, Iceberg TICK) with configurable color schemes.
Includes options for iceberg overlays and highlighting.
► Moving Averages Groups (Dual, Smoothed/Base, MA Ribbon):
Dual MA group: Settings for fast and slow moving averages, including type, length, color, and crossover alerts.
Smoothed/Base MA group: Additional methods to filter out short‑term noise and confirm trends.
MA Ribbon group: Independently plots multiple moving averages as a ribbon, with full customization for each line.
► Divergence & Profile Groups:
Includes inputs for divergence detection (source, pivot lookback) and customization of the TICK Distribution Profile (lookback period, color thresholds, layout details).
► ZigZag & Pivot Trendline Groups:
Allows customization of zigzag parameters to highlight trend extremities.
Provides settings for pivot trendline appearance and behavior.
► TICK Levels & Background Colors:
Defines thresholds for neutral, trend, and extreme levels.
Offers color selections for level markers and optional background shading.
► Data Table Configuration:
Enables setting of table location, lookback intervals, and font size to present essential TICK metrics in a user‑friendly format.
--------------------------------------------------------------------------------------------------------
█ Additional Insights:
► TICK Index Fundamentals:
Monitors the net difference between stocks ticking up and down.
A positive reading indicates broader market participation, while a negative reading suggests increased selling pressure.
Understanding how long the TICK stays above or below zero is crucial for gauging intraday momentum.
► Role of Moving Averages:
Smooth out short‑term fluctuations, helping to highlight the prevailing trend.
Crossovers between fast and slow MAs can serve as clear signals for market momentum shifts.
► Interpreting the MA Ribbon:
Provides a layered perspective on market direction.
Consistent color and alignment confirm a strong trend, while variations may hint at reversals.
► Utility of the Distribution Profile:
Breaks down the TICK index into bins, identifying the point of control.
Changes in this control zone—particularly over different lookback periods—can signal potential trend changes.
► Precision of Data Tables:
Supplies live numerical feedback on key market internals, ensuring trading decisions are based on precise, real‑time measurements.
► Comparative Advantage:
Unlike many TICK tools that simply plot raw values, TICK+ provides an integrated, multidimensional analysis of market internals.
Its advanced features—ranging from unique display modes to sophisticated analytical components—make it indispensable for trading US indices, futures, and blue‑chip stocks.
--------------------------------------------------------------------------------------------------------
Disclaimer
This indicator is provided for educational and research purposes only and does not constitute financial advice. Trading involves risk, and thorough testing on historical data is recommended before applying any strategy using TICK+ in live markets.
Triad Trade MatrixOverview
Triad Trade Matrix is an advanced multi-strategy indicator built using Pine Script v5. It is designed to simultaneously track and display key trading metrics for three distinct trading styles on a single chart:
Swing Trading (Swing Supreme):
This mode captures longer-term trends and is designed for trades that typically span several days. It uses customizable depth and deviation parameters to determine swing signals.
Day Trading (Day Blaze):
This mode focuses on intraday price movements. It generates signals that are intended to be executed within a single trading session. The parameters for depth and deviation are tuned to capture more frequent, shorter-term moves.
Scalping (Scalp Surge):
This mode is designed for very short-term trades where quick entries and exits are key. It uses more sensitive parameters to detect rapid price movements suitable for scalping strategies.
Each trading style is represented by its own merged table that displays real-time metrics. The tables update automatically as new trading signals are generated.
Key Features
Multi-Style Tracking:
Swing Supreme (Large): For swing trading; uses a purple theme.
Day Blaze (Medium): For day trading; uses an orange theme.
Scalp Surge (Small): For scalping; uses a green theme.
Real-Time Metrics:
Each table displays key trade metrics including:
Entry Price: The price at which the trade was entered.
Exit Price: The price at which the previous trade was exited.
Position Size: Calculated as the account size divided by the entry price.
Direction: Indicates whether the trade is “Up” (long) or “Down” (short).
Time: The time when the trade was executed (formatted to hours and minutes).
Wins/Losses: The cumulative number of winning and losing trades.
Current Price & PnL: The current price on the chart and the profit/loss computed relative to the entry price.
Duration: The number of bars that the trade has been open.
History Column: A merged summary column that shows the most recent trade’s details (entry, exit, and result).
Customizability:
Column Visibility: Users can toggle individual columns (Ticker, Timeframe, Entry, Exit, etc.) on or off according to their preference.
Appearance Settings: You can customize the table border width, frame color, header background, and text colors.
History Toggle: The merged history column can be enabled or disabled.
Chart Markers: There is an option to show or hide chart markers (labels and lines) that indicate trade entries and exits on the chart.
Trade History Management:
The indicator maintains a rolling history (up to three recent trades per trading style) and displays the latest summary in the merged table.
This history column provides a quick reference to recent performance.
How It Works
Signal Generation & Trade Metrics
Trade Entry/Exit Calculation:
For each trading style, the indicator uses built-in functions (such as ta.lowestbars and ta.highestbars) to analyze price movements. Based on a customizable "depth" and "deviation" parameter, it determines the point of entry for a trade.
Swing Supreme: Uses larger depth/deviation values to capture swing trends.
Day Blaze: Uses intermediate values for intraday moves.
Scalp Surge: Uses tighter parameters to pick up rapid price changes.
Metrics Update:
When a new trade signal is generated (i.e., when the trade entry price is updated), the indicator calculates:
The current PnL as the difference between the current price and the entry price (or vice versa, depending on the trade direction).
The duration as the number of bars since the trade was opened.
The position size using the formula: accountSize / entryPrice.
History Recording:
Each time a new trade is triggered (i.e., when the entry price is updated), a summary string is created (showing entry, exit, and win/loss status) and appended to the corresponding trade history array. The merged table then displays the latest summary from this history.
Table Display
Merged Table Structure:
Each trading style (Swing Supreme, Day Blaze, and Scalp Surge) is represented by a table that has 15 columns. The columns are:
Trade Type (e.g., Swing Supreme)
Ticker
Timeframe
Entry Price
Exit Price
Position Size
Direction
Time of Entry
Account Size
Wins
Losses
Current Price
Current PnL
Duration (in bars)
History (the latest trade summary)
User Customization:
Through the settings panel, users can choose which columns to display.
If a column is toggled off, its cells will remain blank, allowing traders to focus on the metrics that matter most to them.
Appearance & Themes:
The table headers and cell backgrounds are customizable via color inputs. The trading style names are color-coded:
Swing Supreme (Large): Uses a purple theme.
Day Blaze (Medium): Uses an orange theme.
Scalp Surge (Small): Uses a green theme.
How to Use the Indicator
Add the Indicator to Your Chart:
Once published, add "Triad Trade Matrix" to your TradingView chart.
Configure the Settings:
Adjust the Account Size to match your trading capital.
Use the Depth and Deviation inputs for each trading style to fine-tune the signal sensitivity.
Toggle the Chart Markers on if you want visual entry/exit markers on the chart.
Customize which columns are visible via the column visibility toggles.
Enable or disable the History Column to show the merged trade history in the table.
Adjust the appearance settings (colors, border width, etc.) to suit your chart background and preferences.
Interpret the Tables:
Swing Supreme:
This table shows metrics for swing trades.
Look for changes in entry price, PnL, and trade duration to monitor longer-term moves.
Day Blaze:
This table tracks day trading activity.It will update more frequently, reflecting intraday trends.
Scalp Surge:
This table is dedicated to scalping signals.Use it to see quick entry/exit data and rapid profit/loss changes.
The History column (if enabled) gives you a snapshot of the most recent trade (e.g., "E:123.45 X:124.00 Up Win").
Use allerts:
The indicator includes alert condition for new trade entries(both long and short)for each trading style.
Summary:
Triad Trade Matrix provides an robust,multi-dimensional view of your trading performance across swing trading, day trading, and scalping.
Best to be used whith my other indicators
True low high
Vma Ext_Adv_CustomTbl
This indicator is ideal for traders who wish to monitor multiple trading styles simultaneously, with a clear, technical, and real-time display of performance metrics.
Happy Trading!
Aggressive Predictor+ (Last Bar, Vol, Wick)# Aggressive Predictor+ Pine Script Indicator
**Version:** Based on the script incorporating Last Bar analysis, Volume Confirmation, and Wick Rejection.
## Overview
This TradingView Pine Script indicator aims to predict the likely directional bias of the **next** candle based on an aggressive analysis of the **last closed candle's** price action, volume, and wick characteristics relative to recent market volatility (ATR).
It is designed to be **highly reactive** to the most recent bar's information. The prediction is visualized directly on the chart through shapes, a projected line, a text label, and an information table.
**Please Note:** Predicting the next candle is inherently speculative. This indicator provides a probability assessment based on its specific logic and should be used as a supplementary tool within a broader trading strategy, not as a standalone signal. Its performance heavily depends on market conditions and the chosen settings.
## Core Logic Explained
The indicator follows these steps for each new bar, looking back at the **last closed bar** (` `):
1. **Calculate Recent Volatility:** Determines the Average True Range (ATR) over the specified `ATR Lookback Period` (`atr_len`). This provides context for how volatile the market has been recently.
2. **Analyze Last Bar's Body:** Calculates the price change from open to close (`close - open `) of the last completed bar.
3. **Compare Body to Volatility:** Compares the absolute size of the last bar's body to the calculated ATR (`prev_atr`) multiplied by a sensitivity threshold (`threshold_atr_mult`).
* If the body size (positive) exceeds the threshold, the initial prediction is "Upward".
* If the body size (negative) exceeds the negative threshold, the initial prediction is "Downward".
* Otherwise, the initial prediction is "Neutral".
4. **Check Volume Confirmation:** Compares the volume of the last bar (`volume `) to its recent average volume (`ta.sma(volume, vol_avg_len) `). If the volume is significantly higher (based on `vol_confirm_mult`), it adds context ("High Vol") to directional predictions.
5. **Check for Wick Rejection:** Analyzes the wicks of the last bar.
* If the initial prediction was "Upward" but there was a large upper wick (relative to the body size, defined by `wick_rejection_mult`), it indicates potential selling pressure rejecting higher prices. The prediction is **overridden to "Neutral"**.
* If the initial prediction was "Downward" but there was a large lower wick, it indicates potential buying pressure supporting lower prices. The prediction is **overridden to "Neutral"**.
6. **Determine Final Prediction:** The final state ("Upward", "Downward", or "Neutral") is determined after considering potential wick rejection overrides. Context about volume or wick rejection is added to the display text.
## Visual Elements
* **Prediction Shapes:**
* Green Up Triangle: Below the bar for an "Upward" prediction (without wick rejection).
* Red Down Triangle: Above the bar for a "Downward" prediction (without wick rejection).
* Gray Diamond: Above/Below the bar if a directional move was predicted but then neutralized due to Wick Rejection.
* **Prediction Line:**
* Extends forward from the current bar's close for `line_length` bars (Default: 20).
* Color indicates the final predicted state (Green: Upward, Red: Downward, Gray: Neutral).
* Style is solid for directional predictions, dotted for Neutral.
* The *slope/magnitude* of the line is based on recent volatility (ATR) and the `projection_mult` setting, representing a *potential* magnitude if the predicted direction holds, scaled by recent volatility. **This is purely a visual projection, not a precise price forecast.**
* **Prediction Label:**
* Appears at the end of the Prediction Line.
* Displays the final prediction state (e.g., "Upward (High Vol)", "Neutral (Wick Rej)").
* Shows the raw price change of the last bar's body and its size relative to ATR (e.g., "Last Body: 1.50 (120.5% ATR)").
* Tooltip provides more detailed calculation info.
* **Info Table:**
* Displays the prediction state, color-coded.
* Shows details about the last bar's body size relative to ATR.
* Dynamically positioned near the latest bar (offsets configurable).
## Configuration Settings (Inputs)
These settings allow you to customize the indicator's behavior and appearance. Access them by clicking the "Settings" gear icon on the indicator name on your chart.
### Price Action & ATR
* **`ATR Lookback Period` (`atr_len`):**
* *Default:* 14
* *Purpose:* Number of bars used to calculate the Average True Range (ATR), which measures recent volatility.
* **`Body Threshold (ATR Multiplier)` (`threshold_atr_mult`):**
* *Default:* 0.5
* *Purpose:* Key setting for **aggression**. The last bar's body size (`close - open`) must be greater than `ATR * this_multiplier` to be initially classified as "Upward" or "Downward".
* *Effect:* **Lower values** make the indicator **more aggressive** (easier to predict direction). Higher values require a stronger price move relative to volatility and result in more "Neutral" predictions.
### Volume Confirmation
* **`Volume Avg Lookback` (`vol_avg_len`):**
* *Default:* 20
* *Purpose:* Number of bars used to calculate the simple moving average of volume.
* **`Volume Confirmation Multiplier` (`vol_confirm_mult`):**
* *Default:* 1.5
* *Purpose:* Volume on the last bar is considered "High" if it's greater than `Average Volume * this_multiplier`.
* *Effect:* Primarily adds context "(High Vol)" or "(Low Vol)" to the display text for directional predictions. Doesn't change the core prediction state itself.
### Wick Rejection
* **`Wick Rejection Multiplier` (`wick_rejection_mult`):**
* *Default:* 1.0
* *Purpose:* If an opposing wick (upper wick on an up-candle, lower wick on a down-candle) is larger than `body size * this_multiplier`, the directional prediction is overridden to "Neutral".
* *Effect:* Higher values require a much larger opposing wick to cause a rejection override. Lower values make wick rejection more likely.
### Projection Settings
* **`Projection Multiplier (ATR based)` (`projection_mult`):**
* *Default:* 1.0
* *Purpose:* Scales the projected *magnitude* of the prediction line. The projected price change shown by the line is `+/- ATR * this_multiplier`.
* *Effect:* Adjusts how far up or down the prediction line visually slopes. Does not affect the predicted direction.
* **`Prediction Line Length (Bars)` (`line_length`):**
* *Default:* 20
* *Purpose:* Controls how many bars forward the **visual** prediction line extends.
* *Effect:* Purely visual length adjustment.
### Visuals
* **`Upward Color` (`bullish_color`):** Color for Upward predictions.
* **`Downward Color` (`bearish_color`):** Color for Downward predictions.
* **`Neutral Color` (`neutral_color`):** Color for Neutral predictions (including Wick Rejections).
* **`Show Prediction Shapes` (`show_shapes`):** Toggle visibility of the triangles/diamonds on the chart.
* **`Show Prediction Line` (`show_line`):** Toggle visibility of the projected line.
* **`Show Prediction Label` (`show_label`):** Toggle visibility of the text label at the end of the line.
* **`Show Info Table` (`show_table`):** Toggle visibility of the information table.
### Table Positioning
* **`Table X Offset (Bars)` (`table_x_offset`):**
* *Default:* 3
* *Purpose:* How many bars to the right of the current bar the info table should appear.
* **`Table Y Offset (ATR Multiplier)` (`table_y_offset_atr`):**
* *Default:* 0.5
* *Purpose:* How far above the high of the last bar the info table should appear, measured in multiples of ATR.
## How to Use
1. Open the Pine Editor in TradingView.
2. Paste the complete script code.
3. Click "Add to Chart".
4. Adjust the input settings (especially `threshold_atr_mult`) to tune the indicator's aggressiveness and visual preferences.
5. Observe the prediction elements alongside your other analysis methods.
## Disclaimer
**This indicator is for informational and educational purposes only. It does not constitute financial advice or a recommendation to buy or sell any asset.** Trading financial markets involves significant risk, and you could lose money. Predictions about future price movements are inherently uncertain. The performance of this indicator depends heavily on market conditions and the settings used. Always perform your own due diligence and consider multiple factors before making any trading decisions. Use this indicator at your own risk.
Relative Strength and MomentumRelative Strength and Momentum Indicator
Unlock deeper market insights with the Relative Strength and Momentum Indicator—a powerful tool designed to help traders and investors identify the strongest stocks and sectors based on relative performance. This custom indicator displays essential information on relative strength and momentum for up to 15 different symbols, compared against a benchmark index, all within a clear and organized table format.
Key Features:
1. Customizable Inputs: Choose up to 15 symbols to compare, along with a benchmark index, allowing you to tailor the indicator to your trading strategy. The 'Lookback Period' input defines how many weeks of data are analyzed for relative strength and momentum.
2. Relative Strength Calculation: For each selected symbol, the indicator calculates the Relative Strength (RS) against the chosen benchmark. This RS is further refined using an exponential moving average (EMA) to smooth the results, providing a more stable trend overview.
3. Momentum Analysis: Momentum is determined by analyzing the rate of change in relative strength. The indicator calculates a momentum rank for each symbol, based on its relative strength’s improvement or deterioration.
4. Percentile Ranking System: Each symbol is assigned a percentile rank (from 1 to 100) based on its relative strength compared to the others. Similarly, momentum rankings are also assigned from 1 to 100, offering a clear understanding of which assets are outperforming or underperforming.
5. Visual Indicators:
a. Green: Signals improving or stable relative strength and momentum.
b. Red: Indicates declining relative strength or momentum.
c. Aqua: Highlights symbols performing well on both relative strength and momentum—ideal candidates for further analysis.
6. Two Clear Tables:
a. Relative Strength Rank Table: Displays weekly rankings of relative strength for each symbol.
b. Momentum Table: Shows momentum trends, helping you identify which symbols are gaining or losing strength.
7. Color-Coded for Easy Analysis: The tables are color-coded to make analysis quick and straightforward. A green color means the symbol is performing well in terms of relative strength or momentum, while red indicates weaker performance. Aqua marks symbols that are excelling in both areas.
Use Case:
a. Sector Comparison: Identify which sectors or indexes are showing both relative strength and momentum to pick high-potential stocks. This allows you to align with broader market trends for improved trade entries.
b. Stock Selection: Quickly compare symbols within the same sector to find the stronger performers.
Swing Trade IndicatorThis is a Swing Trade Indicator that combines several technical indicators to analyze market conditions and generate trade signals. I've included two tables that provide real-time information to help you analyze the market and track trades: the Market Status Table and the Trade Tracking Table. These tables are overlaid on the TradingView chart and are customizable in terms of position and visibility.
Simple Moving Averages (SMAs):
Determines trend direction (e.g., bullish if fastMA > slowMA).
Calculates the average closing price over a set period:
fastMA: 21-period SMA (short-term trend).
slowMA: 50-period SMA (medium-term trend).
ultraSlowMA: 200-period SMA (long-term trend).
How:
ta.sma(close, fastLength) computes the SMA of the closing price over fastLength bars (similarly for slowLength and ultraSlowLength).
Volume Analysis:
Identifies potential liquidity spikes.
Measures trading volume to detect high activity.
Average volume over liquidityPeriod (20 bars).
Standard deviation of volume to set a dynamic threshold.
How:
avgVolume = ta.sma(volume, liquidityPeriod): Average volume.
volumeStdDev = ta.stdev(volume, liquidityPeriod): Volatility of volume.
highVolume = volume > avgVolume + volumeStdDev * volumeThresholdMultiplier: Flags high volume if it exceeds the average plus a multiplier (default 1.0) times the standard deviation.
Relative Strength Index (RSI):
Filters entries to avoid overextended markets.
Measures momentum and overbought/oversold conditions.
14-period RSI with thresholds at 60 (overbought) and 40 (oversold).
How:
rsiValue = ta.rsi(close, rsiLength) calculates RSI based on price changes over 14 bars.
Average Directional Index (ADX):
Gauges whether the trend is strong enough to trade.
Assesses trend strength.
14-period ADX.
How:
Calculates True Range (tr), Plus Directional Movement (plusDM), and Minus Directional Movement (minusDM).
Smooths these with ta.rma (Running Moving Average) over adxLength (14).
Computes plusDI and minusDI (directional indicators), then dx (difference), and finally adxValue = ta.rma(dx, adxLength) for trend strength.
Classifies as "Strong" (≥40), "Moderate" (≥20), or "Weak" (<20).
Moving Average Convergence Divergence (MACD) (Optional):
Optional filter for entry conditions if useMacdFilter is enabled.
Tracks momentum and trend changes.
Fast EMA (12), Slow EMA (26), Signal Line (9).
How:
= ta.macd(close, macdFastLength, macdSlowLength, macdSignalLength) computes the MACD components.
macdBullish = macdLine > signalLine: Bullish signal.
macdBearish = macdLine < signalLine: Bearish signal.
Liquidity Zones:
Confirms entries near key levels and suggests next trade setups.
Identifies support and resistance levels based on recent price extremes.
Dynamic levels over 20 bars (if useDynamicLevels is true).
How:
highLiquidityLevel1 = ta.highest(high, 20): Highest high in last 20 bars.
highLiquidityLevel2 = ta.highest(high , 20): Highest high from 20 to 40 bars ago.
highLiquidityLevel3 = ta.lowest(low, 20): Lowest low in last 20 bars.
highLiquidityLevel4 = ta.lowest(low , 20): Lowest low from 20 to 40 bars ago.
Upper and lower zones are derived (upperLevel, lowerLevel), with a midpoint between them.
How It Calculates Entries and Exits
Long Entry:
Basic Conditions (longEntry):
close > fastMA: Price is above the 21-period SMA.
fastMA > slowMA: Short-term trend is above medium-term trend (bullish).
rsiValue < rsiOverbought: RSI below 60 (not overbought).
(not useMacdFilter or macdBullish): If MACD filter is off, ignore it; if on, MACD must be bullish.
Confirmed Entry (confirmedLongEntry):
longEntry is true.
close >= highLiquidityLevel3 * 0.95 and close <= highLiquidityLevel3 * 1.05: Price is within 5% of the lower liquidity level (support).
Action: Sets currentPosition = 'long', records entry price and bar, plots a green triangle below the bar.
Short Entry:
Basic Conditions (shortEntry):
close < fastMA: Price is below the 21-period SMA.
fastMA < slowMA: Short-term trend is below medium-term trend (bearish).
rsiValue > rsiOversold: RSI above 40 (not oversold).
(not useMacdFilter or macdBearish): If MACD filter is off, ignore it; if on, MACD must be bearish.
Confirmed Entry (confirmedShortEntry):
shortEntry is true.
close <= highLiquidityLevel1 * 1.05 and close >= highLiquidityLevel1 * 0.95: Price is within 5% of the upper liquidity level (resistance).
Action: Sets currentPosition = 'short', records entry price and bar, plots a red triangle above the bar.
Exit Conditions
Note: The exit logic is defined but commented out in the script (//longExit and //shortExit), meaning it doesn’t automatically exit positions. It calculates stop-loss and take-profit levels for manual use:
Long Exit (if uncommented):
close < stopLossLevelLong: Price falls below stop-loss (entry price × (1 - 1.5%)).
close > takeProfitLevelLong: Price exceeds take-profit (entry price × (1 + 1.5% × 2.0)).
Short Exit (if uncommented):
close > stopLossLevelShort: Price rises above stop-loss (entry price × (1 + 1.5%)).
close < takeProfitLevelShort: Price falls below take-profit (entry price × (1 - 1.5% × 2.0)).
Suggested Levels: The script provides suggestedLongSL, suggestedLongTP, suggestedShortSL, and suggestedShortTP in the Market Status Table, based on liquidity levels rather than entry price, for manual exits.
Users Can Edit Settings:
Market Status Table Position: Dropdown (e.g., "top_right" to "bottom_left").
Trade Tracking Table Position: Dropdown (e.g., "bottom_right" to "middle_center").
Visibility Toggles (checkboxes):
Show Tables: Enable/disable tables (default: true).
Show Liquidity Zones: Not plotted but affects logic (default: true).
Show Entry Points: Show/hide entry triangles (default: true).
Use Dynamic Levels: Enable/disable liquidity zones (default: true).
Use MACD for Entry Filter: Add MACD to entry conditions (default: false).
Show MACD on Chart: Not implemented but reserved (default: false).
Indicator Periods:
Fast MA Length: Integer (default: 21, e.g., change to 10).
Slow MA Length: Integer (default: 50, e.g., change to 30).
Ultra Slow MA Length: Integer (default: 200, e.g., change to 100).
Liquidity Detection Period: Integer (default: 20, e.g., change to 10).
RSI Length: Integer (default: 14, e.g., change to 7).
ADX Length: Integer (default: 14, e.g., change to 20).
MACD Fast/Slow/Signal Length: Integers (default: 12/26/9, e.g., 9/21/5).
Thresholds:
Volume Threshold Multiplier: Float (default: 1.0, e.g., 1.5 for stricter high volume).
RSI Overbought: Integer (default: 60, e.g., 70).
RSI Oversold: Integer (default: 40, e.g., 30).
Stop Loss %: Float (default: 1.5, e.g., 2.0, range 0.1-10).
Take Profit Ratio: Float (default: 2.0, e.g., 3.0, range 1.0-5.0).
Liquidity Threshold (%): Float (default: 2.0, e.g., 1.5, range 0.5-5.0).
Profit & Risk CalculatorThe "Profit & Risk Calculator" script in Pine Script (TradingView) is designed to help users calculate potential profit and risk when trading, and to provide alerts when specific price levels are reached (such as entry price, take profit, or stop loss). It includes several components as described below:
1. Input Fields:
The user can manually input various prices: entry price, stop loss price, and take profit price, with steps of 0.25.
There is also an option to input a custom value (e.g., for personal lot sizing) and a total investment amount.
2. Dynamic Lines:
The script draws dynamic horizontal lines for the input prices: entry line (white), stop loss line (red), and take profit line (green).
These lines are automatically updated based on the entered price levels.
3. Labels for the Lines:
Labels are added to the lines to visually indicate the entry, stop loss, and take profit levels on the chart.
4. Long and Short Position Calculations:
The script calculates potential profit and loss for both long (profit if the price goes up) and short (profit if the price goes down) positions.
It also calculates the distance between entry and take profit, and distance between entry and stop loss, along with the risk/reward ratio (RR).
5. Alerts:
The script generates alerts when one of the following conditions is met:
Entry Condition: The price touches or exceeds the entry price (high >= entryPrice).
Stop Loss Condition: The price touches or drops below the stop loss price (low <= stopLossPrice).
Take Profit Condition: The price touches or exceeds the take profit price (high >= takeProfitPrice).
6. Lot Calculations:
The script calculates both micro and mini lot sizes based on a preset table and the custom value.
The results are displayed in a table on the chart.
7. Profit/Risk Table:
The script shows two tables:
One table calculates the profit, loss, and risk/reward ratio based on the input entry price.
A second table shows the same calculations based on the current price.
8. Chart Display:
The script places tables and other visual data on the chart, such as preset values, profit and loss calculations, and the distance from take profit and stop loss to the entry price.
English Explanation of Each Part of the Script
1. Input Fields
The script starts with several input fields where the user can specify the entry price, stop loss price, take profit price, custom value, and investment amount. These values help define the parameters for risk/reward calculations.
2. Dynamic Horizontal Lines
Three horizontal lines are drawn on the chart, representing the entry price, stop loss price, and take profit price. These lines update dynamically based on user input.
3. Dynamic Line Updates
As the user adjusts their inputs, the position of the lines is updated in real-time to match the new price levels. This keeps the chart visually accurate.
4. Labels for Lines
Labels are placed on the chart next to each price line, allowing the user to clearly see which line represents which price level.
5. Long and Short Position Calculations
The script calculates the potential profit or loss for both long (prices go up) and short (prices go down) positions, providing users with an idea of their potential gains or losses.
6. **6. Risk/Reward Ratio Calculation
This calculates the Risk/Reward Ratio (RR) by dividing the distance between the take profit and entry price by the distance between the entry and stop loss price. This gives the trader an idea of how much risk they're taking relative to the potential reward.
7. Alert Conditions
The alert conditions are defined based on the price hitting the set levels:
Entry Condition: If the price goes up and touches the entry level, the alert is triggered.
Stop Loss Condition: If the price drops and hits the stop loss level, the alert is triggered.
Take Profit Condition: If the price rises and reaches the take profit level, the alert is triggered.
8. Alert Configuration
Each condition is linked to an alert that sends a message when the specific price level is touched. The alerts notify the user when the entry, stop loss, or take profit levels are hit.
9. Lot Calculations
The script includes a function that calculates micro and mini lot sizes based on a preset table and a custom value input by the user. This is useful for adjusting lot sizes to the desired amount and determining position sizes for trades.
10. Entry Price-Based Profit & Loss Table
A table is generated on the chart that displays detailed information about the profit, loss, and risk/reward ratio based on the entry price. It helps traders see the potential outcomes for different lot sizes.
11. Current Price-Based Profit & Loss Table
This second table provides similar information as the first but calculates profit, loss, and risk/reward based on the current price. This allows the trader to see how their position performs as the market price changes in real time.
Uptrick: Asset Rotation SystemOverview
The Uptrick: Asset Rotation System is a high-level performance-based crypto rotation tool. It evaluates the normalized strength of selected assets and dynamically simulates capital rotation into the strongest asset while optionally sidestepping into cash when performance drops. Built to deliver an intelligent, low-noise view of where capital should move, this system is ideal for traders focused on strength-driven allocation without relying on standard technical indicators.
Purpose
The purpose of this tool is to identify outperforming assets based strictly on relative price behavior and automatically simulate how a portfolio would evolve if it consistently moved into the strongest performer. By doing so, it gives users a realistic and dynamic model for capital optimization, making it especially suitable during trending markets and major crypto cycles. Additionally, it includes an optional safety fallback mechanism into cash to preserve capital during risk-off conditions.
Originality
This system stands out due to its strict use of normalized performance as the only basis for decision-making. No RSI, no MACD, no trend oscillators. It does not rely on any traditional indicator logic. The rotation logic depends purely on how each asset is performing over a user-defined lookback period. There is a single optional moving average filter, but this is used internally for refinement, not for entry or exit logic. The system’s intelligence lies in its minimalism and precision — using normalized asset scores to continuously rotate capital with clarity and consistency.
Inputs
General
Normalization Length: Defines how many bars are used to calculate each asset’s normalized score. This score is used to compare asset performance.
Visuals: Selects between Equity Curve (show strategy growth over time) or Asset Performance (compare asset strength visually).
Detect after bar close: Ensures changes only happen after a candle closes (for safety), or allows bar-by-bar updates for quicker reactions.
Moving Average
Used internally for optional signal filtering.
MA Type: Lets you choose which moving average type to use (EMA, SMA, WMA, RMA, SMMA, TEMA, DEMA, LSMA, EWMA, SWMA).
MA Length: Sets how many bars the moving average should calculate over.
Use MA Filter: Turns the filter on or off. It doesn’t affect the signal directly — just adds a layer of control.
Backtest
Used to simulate equity tracking from a chosen starting point. All calculations begin from the selected start date. Prior data is ignored for equity tracking, allowing users to isolate specific market cycles or testing periods.
Starting Day / Month / Year: The exact day the strategy starts tracking equity.
Initial Capital $: The amount of simulated starting capital used for performance calculation.
Rotation Assets
Each asset has 3 controls:
Enable: Include or exclude this asset from the rotation engine.
Symbol: The ticker for the asset (e.g., BINANCE:BTCUSDT).
Color: The color for visualization (labels, plots, tables).
Assets supported by default:
BTC, ETH, SOL, XRP, BNB, NEAR, PEPE, ADA, BRETT, SUI
Cash Rotation
Normalization Threshold USDC: If all assets fall below this threshold, the system rotates into cash.
Symbol & Color: Sets the cash color for plots and tables.
Customization
Dynamic Label Colors: Makes labels change color to match the current asset.
Enable Asset Label: Plots asset name labels on the chart.
Asset Table Position: Choose where the key asset usage table appears.
Performance Table Position: Choose where the backtest performance table appears.
Enable Realism: Enables slippage and fee simulation for realistic equity tracking. Adjusted profit is shown in the performance table.
Equity Styling
Show Equity Curve (STYLING): Toggles an extra-thick visual equity curve.
Background Color: Adds a soft background color that matches the current asset.
Features
Dual Visualization Modes
The script offers two powerful modes for real-time visual insights:
Equity Curve Mode: Simulates the growth of a portfolio over time using dynamic asset rotation. It visually tracks capital as it moves between outperforming assets, showing compounded returns and the current allocation through both line plots and background color.
Asset Performance Mode: Displays the normalized performance of all selected assets over the chosen lookback period. This mode is ideal for comparing relative strength and seeing how different coins perform in real-time against one another, regardless of price level.
Multi-Asset Rotation Logic
You can choose up to 10 unique assets, each fully customizable by symbol and color. This allows full flexibility for different strategies — whether you're rotating across majors like BTC, ETH, and SOL, or including meme tokens and stablecoins. You decide the rotation universe. If none of the selected assets meet the strength threshold, the system automatically moves to cash as a protective fallback.
Key Asset Selection Table
This on-screen table displays how frequently each enabled asset was selected as the top performer. It updates in real time and can help traders understand which assets the system has historically favored.
Asset Name: Shortened for readability
Color Box: Visual color representing the asset
% Used: How often the asset was selected (as a percentage of strategy runtime)
This table gives clear insight into historical rotation behavior and asset dominance over time.
Performance Comparison Table
This second table shows a full backtest vs. chart comparison, broken down into key performance metrics:
Backtest Start Date
Chart Asset Return (%) – The performance of the asset you’re currently viewing
System Return (%) – The equity growth of the rotation strategy
Outperformed By – Shows how many times the system beat the chart (e.g., 2.1x)
Slippage – Estimated total slippage costs over the strategy
Fees – Estimated trading fees based on rotation activity
Total Switches – Number of times the system changed assets
Adjusted Profit (%) – Final net return after subtracting fees and slippage
Equity Curve Styling
To enhance visual clarity and aesthetics, the equity curve includes styling options:
Custom Thickness Curve: A second stylized line plots a shadow or highlight of the main equity curve for stronger visual feedback
Dynamic Background Coloring: The chart background changes color to match the currently held asset, giving instant visual context
Realism Mode
By enabling Realism, the system calculates estimated:
Trading Fees (default 0.1%)
Slippage (default 0.05%)
These costs are subtracted from the equity curve in real time, and shown in the table to produce an Adjusted Return metric — giving users a more honest and execution-aware picture of system performance.
Adaptive Labeling System
Each time the asset changes, an on-chart label updates to show:
Current Asset
Live Equity Value
These labels dynamically adjust in color and visibility depending on the asset being held and your styling preferences.
Full Customization
From visual position settings to table placements and custom asset color coding, the entire system is fully modular. You can move tables around the screen, toggle background visuals, and control whether labels are colored dynamically or uniformly.
Key Concepts
Normalized values represent how much an asset has changed relative to its past price over a fixed period, allowing performance comparisons across different assets. Outperforming refers to the asset with the highest normalized value at a given time. Cash fallback means the system moves into a stable asset like USDC when no strong performers are available. The equity curve is a running total of simulated capital over time. Slippage is the small price difference between expected and actual trade execution due to market movement.
Use Case Flexibility
You don’t need to use all 10 assets. The system works just as effectively with only 1 asset — such as rotating between CASH and SOL — for a simple, minimal strategy. This is ideal for more focused portfolios or thematic rotation systems.
How to Use the Indicator
To use the Uptrick: Asset Rotation System, start by selecting which assets to include and entering their symbols (e.g., BINANCE:BTCUSDT). Choose between Equity Curve mode to see simulated portfolio growth, or Asset Performance mode to compare asset strength. Set your lookback period, backtest start date, and optionally enable the moving average filter or realism settings for slippage and fees. The system will then automatically rotate into the strongest asset, or into cash if no asset meets the strength threshold. Use alerts to be notified when a rotation occurs.
Asset Switch Alerts
The script includes built-in alert conditions for when the system rotates into a new asset. You can enable these to be notified when the system reallocates to a different coin or to cash. Each alert message is labeled by target asset and can be used for automation or monitoring purposes.
Conclusion
The Uptrick: Asset Rotation System is a next-generation rotation engine designed to cut through noise and overcomplication. It gives users direct insight into capital strength, without relying on generic indicators. Whether used to track a broad basket or focus on just two assets, it is built for accuracy, adaptability, and transparency — all in real-time.
Disclaimer
This script is for research and educational purposes only. It is not intended as financial advice. Past performance is not a guarantee of future results. Always consult with a financial professional and evaluate risks before trading or investing.
Uptrick: Reversal Matrix +Overview
The Uptrick: Reversal Matrix + is designed as a comprehensive tool that organizes market information in a visually intuitive way. It presents a variety of signals and data points on the chart, aiming to provide clarity about potential reversals, directional momentum, and the broader context surrounding price behavior. By consolidating numerous indicators and statistics into a single interface, it serves as a versatile companion for different trading styles and time horizons.
Purpose
This indicator offers a multifunctional approach to market analysis. It seeks to help users gain a more holistic view of current conditions rather than focusing on isolated data points. Its primary goal is to guide traders toward recognizing evolving market structures, shifts in buying or selling pressure, and periods where price movement may exhibit stronger or weaker momentum. Because it is designed for adaptive use, it can cater to fast, intraday styles or more deliberate, long-term strategies, depending on how the user configures it.
Originality and Uniqueness
The Reversal Matrix + stands out by merging various categories of market data into cohesive visuals and tables. While many indicators offer singular signals or straightforward buy/sell prompts, this script integrates numerous underlying components and displays them in organized panels. Each piece of data, from volume characteristics to volatility states, is contextualized. This multi-layered approach helps traders see more than just a single dimension of the market. Whether one is exploring short-term breakouts, potential traps, or broader market regimes, the tool accommodates multiple perspectives within a single framework.
Inputs
1. Sensitivity.
This setting allows you to choose different levels based on how frequently you would like signals to appear. Selecting a higher sensitivity may capture faster changes but can produce a greater number of signals. More moderate or smoother settings can be preferable for users looking for less frequent but potentially clearer indications of shifts.
2. Trading Style.
This option adapts the tool to match conservative, normal, or more aggressive preferences. When choosing a conservative style, the script attempts to filter out smaller fluctuations, while the aggressive style might highlight more potential turning points as they emerge.
3. Potential Signal Threshold Difference
This setting adjusts the sensitivity of potential reversal signals. A lower value means the script will highlight only the most distinct setups, filtering out weaker or borderline scenarios. A higher value makes the tool more receptive to subtle shifts, potentially flagging more frequent signals. It allows users to fine-tune how responsive the script is to early momentum changes, depending on their preferred level of signal strictness.
4. Table Positions (Optional).
There are inputs that let you decide the on-chart position of the tables. You can enable or disable these tables and choose where they appear (for instance, top-right or bottom-left), depending on how you want the data displayed alongside price bars.
Table and Its Position
When enabled, a large table, known as the Full Metrics Table, offers extensive details about various technical and behavioral metrics. You can place it anywhere on your chart layout for convenience. It is designed to give you a granular view of current conditions without overwhelming the main price candles themselves.
Another, smaller panel known as the Final Verdict Table can also be displayed at a user-chosen position. This panel simplifies the script’s internal assessments into broader verdicts or summaries, allowing for a quick read on the market’s status.
Features
Multi-Faceted Signal and Alert System.
The indicator continuously scans market activity, highlighting events such as sudden rises or drops, changes in volatility, and shifts in momentum. Users can configure an array of alerts that instantly notify them of these occurrences, reducing the need to constantly monitor the chart.
Candle Overlays and Fading Effects .
In addition to standard chart candles, the script offers visual cues by shading or coloring candles differently when it detects certain signals. The fading mechanism gradually diminishes the bar color of older signals so that recent ones are more noticeable. This helps keep the focus on current opportunities while retaining a historical context.
Contextual Market Synopsis .
Each time a candle closes, the tool updates a variety of behind-the-scenes checks. This process helps the user see whether the market remains within the same general state (trending, ranging, or reversing) or is shifting rapidly. It also adds clarity when conditions may be transitioning between bullish and bearish inclinations.
Adaptable Settings for Different Styles .
Since traders differ in their tolerance for rapid fluctuations, the script’s adjustable Sensitivity and Trading Style inputs provide a way to fine-tune how it reacts. Someone trading on shorter timeframes can opt for more frequent signals that capture subtle changes, whereas a position trader might lean toward smoother outputs that highlight only stronger, more sustained conditions.
Extended Data Analysis .
Beyond immediate buy/sell possibilities, the Reversal Matrix+ delivers comprehensive data to help users confirm or question a market stance. A wide range of volume, volatility, and price action elements are factored in, giving each signal additional context rather than a simple green or red highlight.
Final Verdict Summaries .
When the second table is enabled, it condenses key aspects of the indicator’s internal logic into straightforward statements. Rather than navigating multiple data rows, you can check if the market appears more stable or volatile, potentially bullish or bearish, and whether a reversal probability is deemed high or low.
Large-Scale Alert Coverage .
More than fifty specialized alerts focus on distinct aspects, enabling users to track everything from volume anomalies to momentum acceleration.
Specialized Color Schemes .
To assist in quickly spotting bullish or bearish tendencies, candles and background components may be tinted in line with the latest recognized conditions. This visual reinforcement makes it easier to decide if ongoing signals confirm a previous stance or suggest a change.
Buy/Sell Signals
A core function of the script is to present buy and sell indications on the chart, identifying moments when price momentum may be shifting in a meaningful way. These signals come in two varieties: potential reversals and confirmed reversals. Potential reversals appear sooner, providing an early heads-up that market behavior could be turning. Confirmed reversals require a stronger confluence of underlying conditions, aiming to reduce the likelihood of false starts.
Internally, the script examines multiple facets—such as momentum flow, changes in volatility, and volume characteristics—to determine when a potential transition is noteworthy enough to highlight as a signal. As soon as those conditions line up, the script applies distinct markers or shapes to the candles, making it easy to spot these pivotal points on the chart. In addition, each new signal is emphasized through color-based candle shading, while older signals gradually fade to keep attention on the most relevant opportunities.
Although these signals can function as standalone cues, many traders pair them with the script’s other outputs—such as the Full Metrics Table, the Final Verdict Table, and specialized alerts—to form a more complete perspective. For instance, a potential buy signal spotted in real time may gain extra weight if certain metrics in the table reflect a constructive market backdrop. Meanwhile, the final verdict can offer a succinct confirmation or contradiction to what the buy or sell signal suggests. By combining these elements, traders can pursue strategies that balance both immediacy and context, tailoring their entries and exits to their own tolerance for risk and time horizon.
These features collectively allow users to explore the market from multiple angles. Whether one seeks a deeper technical dive or simpler guidance, the indicator’s layered design aims to cater to a broad spectrum of trading approaches.
Full Metrics Table
A key element of Uptrick: Reversal Matrix+ is the extensive set of data displayed within the Full Metrics Table. Below is an expanded explanation of the sixty-four core metrics. Each is accompanied by a brief statement about its practical significance.
Price
Displays current price.
Price Percent
Shows how much the price has shifted in percentage terms over a recent comparison point. Useful for gauging recent moves.
Vo Open
Presents price movement in relation to the candle’s open. Helps traders see if momentum favored bullish or bearish direction within the candle.
Range Percent
Depicts the span between high and low over the candle’s range, offering a measure of volatility within that candle.
Bodi Percent
Indicates how much of the candle is body as opposed to wick. Shows whether there was more decisive movement or more back-and-forth trading.
Volatility
Generically measures how dramatically price has been fluctuating over a given period. Helps users notice if the market is calm or very active.
Mpeed
Represents a sense of speed in price movement, potentially revealing if momentum is picking up or slowing down.
Accel
Points to how quickly price movement shifts from one level of speed to another. Can hint at a market that is accelerating or flattening out.
Volume
Reflects how many shares, contracts, or units are traded within the current bar. Higher volume may suggest stronger conviction.
Vol Percent
Shows how the volume compares, in percentage, to a previous period’s volume. Useful for spotting surges or drops in trading activity.
Mession Hi
Captures the highest point within a recent observed period or session. Often watched for potential breakout or reversal clues.
Mession Lo
Captures the lowest point within a recent observed period or session. Similarly, used to watch for support or breakdowns.
Pos Percent
Indicates how far the current price stands within its range. Being near the upper percentile suggests strength or an overbought scenario, depending on the viewpoint.
Mpread
Offers a sense of the overall spread in price action, which can reflect the determination of buyers or sellers within a candle.
Gap
Shows the difference in price from a prior close or from some previous reference point. Helps identify abrupt shifts in sentiment.
Conf. (Core)
Presents a general level of signal confidence based on internal checks. Assists in quickly scanning for whether a candle is aligned with broader market patterns.
Availability
Describes liquidity conditions, such as whether the market seems actively traded or comparatively thinner.
Conf. Bias
Highlights if price and momentum appear to confirm a prevailing direction, or if there is a noticeable lack of such alignment.
Valuation
Suggests how current price compares to an internal yardstick of fair or undervalued settings. Useful for spotting potential discount or premium zones.
Reversal
Warns about the possibility that price may turn from its recent direction. Intriguing for those who look for turning points at the end of trends.
Vol. Mtate
Indicates whether conditions are characterized by subdued or elevated swings. A higher reading may signal that caution is warranted.
Direction
Reflects a bullish or bearish inclination based on internal data. Provides a simplified way to see whether momentum is leaning up or down.
Vol. Clarity
Measures the clarity of volume movement, potentially detecting spikes or plateaus that can confirm or contradict price action.
Mtructure
Offers insight into how recent highs and lows are forming. A market that keeps printing higher highs and lows might suggest ongoing upward momentum.
Reaction
Shows how quickly the market responds to new information. Speedy changes may indicate more emotionally driven or news-influenced trading.
Trend Conf.
Suggests the tool’s assessment of how solid or fragile a given direction is. Useful for quickly seeing if a trend might persist.
Zone
Labels whether price is running near top or bottom levels of a selected range, helping identify if a market is pushing extremes.
Ehhaustion
Reveals if a move might be overextended and could retrace. Helpful in deciding whether to take profits or wait for a deeper confirmation.
Range Env
Describes whether the market is operating in a tight or wide range. Can help in choosing strategies like breakout or range-bound approaches.
Demand
Reports on whether buying demand or selling supply is more dominant in the current period. Assists in gauging short-term pressure.
Conf. Level
Provides an additional notion of how firm a signal might be. It may be labeled as early or fully formed, helping with timing considerations.
Momentum
Conveys whether price is accelerating upward, decelerating, or shifting into a more neutral gear.
Higher Close Percent
Indicates the frequency of consecutive higher closes over recent bars. Demonstrates if a market is consistently pushing upward.
Bear Trap
Points to scenarios where sellers could be caught off guard if the market reverses after a seemingly bearish move.
Bull Trap
Opposite of the above, hinting that buyers may be misled if price fails to hold after a seemingly bullish shift.
Vol Mqueeze
Identifies periods where volume and volatility might be compressing. Often used by traders to anticipate a potential abrupt expansion in movement.
Divergence
Suggests a mismatch between price and internal momentum signals. May foretell a hidden reversal or shift in direction.
Hist. Vol
Provides a longer-term viewpoint of how volatility stands in the broader scope, enabling comparison between current choppiness and previous norms.
Velocity
Tracks the overall vigor of price movement. A high velocity can mean powerful directional drive.
Wick Ratio
Analyzes the presence of upper or lower wicks and can suggest whether buying or selling tails are dominant within each bar.
Decision Bias
Indicates how the script perceives near-term market consensus. A strong bias may reveal one side’s momentum more clearly.
Break Chance
Hints at whether a local high or low has a fair possibility of being broken, which can be relevant to breakout-style trading.
Trend Mlope
Observes the slope of the ongoing trend, showing whether price is inclining, declining, or moving sideways over a specified window.
Trend Dir
Concisely states if that slope leans upward or downward. Useful for determining basic directional posture at a glance.
Regime
Groups the market environment into stable bullish, stable bearish, or a more unsettled pattern, helping shape strategic decisions.
Price Comparison
Shows whether price is trading above or below certain historical or moving references. Provides a broad sense of market posture.
Vol Mhift
Highlights any general upswing or downswing in traded volume, indicating whether participants are stepping in or scaling back.
Mtructural Balance
Offers an overview of whether the chart bars show more wick dominance or more body dominance. Helps in reading subtle shifts in power.
Flow Mtability
Portrays how orderly or choppy the price movement is. Less stable flow can lead to more frequent reversals or whipsaws.
Liquidity Pull
Shows the extent to which trading activity may be magnetizing price, helping gauge if there is substantial interest at certain zones.
Bar Mhape
Describes the candle’s shape, such as longer upper or lower tails, which can point to rejections or confirmations of direction.
Bui/Mell Rating
Reveals which side holds greater influence at a glance. Might display more leaning to buy strength or to sell pressure.
Range Vol Flow
Monitors the interplay between how wide the range is and how volume is behaving. If both are expanding, more powerful swings may follow.
Hiper Move
Spots especially strong or sudden moves. Could be a swift jump up or down, prompting attention to volatility management.
Candle Force
Indicates how forceful a candle’s close is compared to its full range. Strong force bars often underscore decisive momentum.
Hi/Lo Tag
Alerts you to newly formed session extremes, helping confirm if recent highs or lows are significant.
Price Action
Labels the candle as leaning bullish, leaning bearish, or neutral, providing a concise understanding of the immediate tone.
Vol Abnorm
Distinguishes between typical volume and unusually high volume that might signal institutional trading or news releases.
Trend Match
Checks if short-term direction is aligned with a broader trend. Clear alignment can strengthen confidence in that direction.
Move Confirm
Conveys whether the tool sees a price movement as already established or still in a formative state.
Momentum Focus
Gives a quick snapshot of whether price momentum is generally tilting higher, lower, or holding steady.
Vol Total
Presents a broad average or accumulated sense of volume over a longer window, providing context for current activity.
Hist. Accum
Positions price within a more extended historical range, allowing one to see if the asset is near major peaks or troughs.
Trap Bias
Informs if the market may be showing conditions that lead to bull traps or bear traps, cautioning traders who chase rapid moves.
Final Verdict Table
The secondary table, known as the Final Verdict Table, condenses the tool’s main findings into concise statements. It watches for patterns such as alignment of trends, clarity of momentum, perceived volatility conditions, and possible reversals. Depending on what the script observes, the table might suggest a bullish confluence, a bearish confluence, an unstable market environment, or a more neutral outlook. This feature is particularly helpful for traders who prefer quick insights over a detailed breakdown of every metric.
Metrics Included in the Final Verdict Table
Directional Momentum Flow
This entry shows how the indicator interprets short-term momentum for the current market. If momentum appears to be gaining strength in one direction, it may indicate that buyers or sellers have a slight edge, whereas a flat reading might suggest indecision.
Volatility Regime Assessment
This metric provides insight into whether the market is relatively calm, moderate, or experiencing elevated volatility. A calmer volatility state might favor steadier strategies, while higher volatility could signal the potential for wider price swings.
Trend Continuity Confidence
This section reflects how confident the tool is in the market’s current trend. It helps traders see whether recent action supports a persistent uptrend, downtrend, or if there is ambiguity that undermines the idea of a consistent directional movement.
Reversal Probability Index
Here, the table evaluates whether conditions are conducive to a market turnaround. If the script observes signs of exhaustion or conflict in momentum, it may suggest an increased possibility of the price switching direction.
Manipulation Detector
This component looks for signals that the market may be attempting to trap buyers or sellers. For instance, a sudden shift might hint at a bull or bear trap scenario. This readout serves to caution against seemingly obvious moves that could quickly reverse.
Final Verdict
Below these metrics, the table presents a single overall statement that integrates the above factors. This final verdict can range from identifying a bullish or bearish confluence to calling the market unstable or neutral if conditions are inconclusive. It is intended to be a quick, high-level summary of the script’s general stance on the market.
Any Other Features
Users can access more than fifty specialized alerts that target different market conditions, from potential trap scenarios to shifts in volatility regimes. These alerts can be integrated into various platforms, ensuring that traders receive immediate notifications when critical triggers occur. The color-coded candle approach, combined with fading effects, helps maintain chart readability. Over time, this setup encourages a balance between a detailed backdrop of market data and a clear depiction of fresh signals.
Why More than One Indicator
Integrating multiple components under one roof offers several advantages. It reduces the chance of relying on a single dimension, such as price action alone, which can sometimes mislead or generate frequent false signals. By combining various measures of volatility, volume, and price structure, the script can reveal confluences or disagreements among different elements. This multi-faceted approach can improve clarity, making it easier to decide when conditions line up favorably or when they conflict, thereby prompting caution.
Conclusion
In summary, the Uptrick: Reversal Matrix + aims to deliver a sweeping overview of market dynamics. It guides users from raw observations—like price and volume—to broader insights concerning trend stability, potential reversals, and overall liquidity. Its dual-table system allows for both fine-grained analysis and fast verdicts, catering to traders with varying degrees of time and attention. The numerous alerts and color coding schemes further round out its capacity for real-time monitoring and visually clear signal presentation.
Disclaimer
Trading involves inherent risks, and no tool can entirely eliminate uncertainty. This indicator’s materials are provided for informational purposes, without guarantees regarding future performance. Traders should exercise due diligence, apply sound risk management, and consider professional advice. The Uptrick: Reversal Matrix+ does not assume responsibility for financial decisions made based on its output.
ReversoReverso – Moving Average Touch Statistics Tracker
Reverso indicator is a technical analysis tool that tracks and visualizes how price interacts with a selected Exponential Moving Average (EMA). It provides detailed statistics about price behavior before, during, and after each EMA touch event.
This script is suitable for both trend-following and mean-reversion traders who want to study EMA reactions, understand market tendencies, and refine entry/exit strategies based on price-memory dynamics.
Features and Functionality
Supported MAs: EMA 9, 20, or 50
Timeframe Support: Uses the chart’s timeframe
Touch Detection: Triggered when the price range (high to low) crosses or touches the EMA
Automatic Data Tracking
Tables for Quick Visual Summary
Visual Overlay: Optional EMA line plotted on chart
Timeframe Support: Uses the chart’s timeframe
Capped history: Most recent 50 touches
Automatic Data Tracking:
Number of EMA touches
Time intervals between touches
Price distance from last touch
Maximum price deviation (above/below EMA) between touches
Time spent above/below EMA
Tables for Quick Visual Summary:
Info Table: Live details about last and first touches, distance from touch, bars above/below, peak movements since last touch
Stats Table: Averages and extreme values for price behavior patterns across recent history
Core Metrics Tracked
Last Touch Price: The last price level where price touched the EMA
Distance from Last Touch: Current % change from the last touch price
Time Between Touches: Average and maximum intervals (in bars or time) between touch events
Max Distance Above/Below: Peak movement above/below EMA between touches
Bars Above/Below: How long price stayed above/below the EMA since last touch
Peak This Cycle: Max deviation above/below in current cycle since last touch
How It Works
Reverso monitors each bar to check if price intersects the selected EMA.
When a new touch occurs, it records the touch price and time, and resets the tracking cycle.
From that point forward, it tracks how far and how long price drifts above or below the EMA.
This process repeats with each new touch, building a detailed profile of how price behaves around the moving average.
The result is a visual and statistical framework for understanding price memory, market rhythm, and mean-reversion opportunities.
Customization Options
EMA Length: Choose from EMA 9, 20, or 50
Show MA Line: Toggle the EMA plot on the chart
Show Info Table: Enable/disable the current-touch summary
Show Statistics Table: Show aggregate data over the history
Table Positioning: Customizable placement for both tables
MA Color: Select custom color for EMA plot
Intended Use Cases
Identify reversal or continuation setups near EMAs
Validate strategies relying on mean reversion
Backtest the consistency of price respect to EMAs
Detect periods of volatility clustering around EMAs
Notes and Disclaimers
This script does not repaint: calculations are made on confirmed bars.
This indicator is educational in nature and should be used alongside other forms of analysis.
Time durations in the tables are approximated using bar timing and may vary across markets/timeframes.